최대마커갯수 이건 확정하기 어렵습니다. 사이트를 이용하는 사람의 PC성능에 따라 좀 달라집니다.
지도API의 마커는 추가될때마다 최소 DOM이 2개씩 추가가 된다고 보시면 됩니다.
그래서 1000개면 대략 2000개의 DOM이 추가가 되는 것이고,
이를 지도를 움직이면 이 2000개가 브라우저 내부에서 지속적으로 위치보정이 되어야 합니다. 그래서 느려지는 것이거든요.
느리게 느끼지 않을려면 초당 60번, 즉 60프레임잡고, 한 프레임당 모든 연산이 가능해야하기에 16.7ms안에 모든 연산이 이루어 져야 하는데, 이게 어려울 겁니다.
대량의 데이터일때는, 직접 데이터를 가공해서 이를 해결할 방법을 찾으셔야 합니다.
지도 API는 단순히 지도를 표시하고 그위에 마커나 이러한 것들을 표시해주는 API지, 내부적으로 성능까지 계산해서 최적화를 해주진 않습니다. 최적화는 개발자의 몫입니다.
중심좌표내 일정범위만 그리는 것도 방법입니다.
마커 클러스터러를 이용하거나, 클러스터러의 기능이 부족하다면 직접 클러스터링을 하는 모듈을 만드셔서 이용하셔도 됩니다.
LOD를 구성하는 것도 방법입니다. LOD(level of detail)는 현재 지도를 보면, 지도판 위에 장소(POI)들이 있는데 레벨이 바뀔때마다 나타나는게 다른 것을 아실 수 있습니다. 이는 LOD를 가독성 측면에서도 짤 수 있으나, 성능향상을 목적으로 특정레벨에서는 특정 갯수만 보이게 할 수도 있습니다. 그래서 지도가 확대되면 점점 보여지게 되는 영역이 작아지니, 마커 갯수가 비슷하게 유지를 할 수 있게 되죠. 2번의 클러스터링과 비슷하지만 표출 방식이 약간 다릅니다.
그래서 런타임시 성능을 올리고 싶으시다면, 초기에 데이터를 받을때 LOD를 구성해 두고, 이를 각 레벨에서의 화면의 보이는 영역의 마커들을 표시하면서, 특정 영역에 몰린다면 클러스터링까지 붙힐 수도 있겠습니다만, 이는 하나씩 해보면서 적용하시는게 좋아보입니다.
말씀하신 커스텀오버레이, 이벤트 등록 이러한 것들도 영향이 없지는 않으나, 그보다 DOM자체가 많으면 느려지기 때문에, 이를 줄이는데 목적을 두시는게 좋을 것 같습니다.