300 no son muchos. Lo importante es usar el evento idle para mostrar una precarga y quitarla cuando se produce ese evento. También podrías usar clustering para optimizar:
https://developers.google.com/maps/a...toomanymarkers
Ahí te recomiendan una librería muy interesante:
https://github.com/googlemaps/js-marker-clusterer