Рисуйте только те маркеры, которые находятся в области видимости карты. Еще лучше - загружать с сервера только те маркеры, которые находятся в области видимости карты. т.е. при получении маркеров, передаете на сервер свою область (позицию и размер), на сервере составляете список маркеров в этой области и возвращаете клиенту. т.к. не очень хорошо хранить 5 тысяч объектов на клиенте, а уж отображать тем более.
UPD: если хотите отобразить все, можно произвести некоторую оптимизацию.
1) Не засовывать массив точек в state. Создайте отдельный массив точек markers, а в state добавьте переменную iteration. И после того, как вы что-то меняете в объектах markers, меняйте в state переменную iteration, и тогда рендеринг будет произведен.
2) Хранить все маркеры в одном path, а не в множестве элементов.
Вот пример
https://jsfiddle.net/7z9grsxe/6/ У меня спокойно держит 10000 объектов.