I think the problem is that if you have that amount of markers in memory browsers get really slow.
I had a similar problem some time ago and what we finally did was to load only the visible markers and load / unload them when the user pans or zooms via AJAX. it is quite easy to implement using the events moveend and zoomend.
// Listeners
GEvent.addListener(map2, "moveend", function() {
map2.clearOverlays();
// Load markers for the current bounds and current zoom level
loadMarkers(map2,map2.getBounds(),map2.getBoundsZoomLevel(map2.getBounds()));
});
GEvent.addListener(map2, "zoomend", function() {
map2.clearOverlays();
// Load markers for the current bounds and current zoom level
loadMarkers(map2,map2.getBounds(),map2.getBoundsZoomLevel(map2.getBounds()));
});
And for the lower zoom levels when a lot of marker have to be shown , we clustered them on the server side and only load the marker that represente each cluster.
Another way to achieve this that is a bit more complicated is to render the makers in a custom overlay tiles in the server side. But I think you will need a map server to do it so. you can read more about it in the google maps documentation
http://code.google.com/intl/en/apis/maps/documentation/javascript/examples/overlay-simple.html