я как-то писал похожую ( ну относительно — там карта была статичной, а отдельными обьектами были только «юниты» ) так что могу посоветовать как-то закешировать карту, что бы относительно статичная большая поверхность была таковой и для браузера. Можно агрегировать гексы в большие квадраты или гексы на сервере и сделать тайлы как на гугл-мапсах. И да, фильтровать обьекты на клиенте по viewport, иначе пользователи или большая карта опять забьет ресурсы клиента. Клиентский кэш можно подсмотреть в гуглмапсах, хотя там вроде ничего сложного.
Понятно что придется события мышки привязывать как-то через координаты, а спецэффекты делать еще одним слоем. Печально, но каждый элемент в виде дива удобен, но не жизнеспособен.
Можно сделать как это делается во флеше — принимать сырые данные по всем обьекстам и рисовать их на клиенте, но флеш это имхо старый век. Можно рисовать полную карту на canvas, но для действительно больших карт имхо лучше это сделать через тайлы в четверть-восьмушку viewport