As respostas acima são mais elegantes, mas descobri uma maneira rápida e suja que realmente funciona incrivelmente bem. Você pode vê-lo em ação em www.buildinglit.com
Tudo o que fiz foi adicionar um deslocamento aleatório à latitude e longditude à minha página genxml.php para que retornasse resultados ligeiramente diferentes a cada vez com deslocamento cada vez que o mapa fosse criado com marcadores. Isso soa como um hack, mas na realidade você só precisa que os marcadores se movam um leve empurrão em uma direção aleatória para serem clicáveis no mapa se estiverem sobrepostos. Na verdade funciona muito bem, eu diria melhor do que o método da aranha, porque quem quer lidar com essa complexidade e tê-los surgindo em todos os lugares. Você só deseja poder selecionar o marcador. Empurrar aleatoriamente funciona perfeitamente.
Aqui está um exemplo da criação do nó de iteração da instrução while em meu php_genxml.php
while ($row = @mysql_fetch_assoc($result)){ $offset = rand(0,1000)/10000000;
$offset2 = rand(0, 1000)/10000000;
$node = $dom->createElement("marker");
$newnode = $parnode->appendChild($node);
$newnode->setAttribute("name", $row['name']);
$newnode->setAttribute("address", $row['address']);
$newnode->setAttribute("lat", $row['lat'] + $offset);
$newnode->setAttribute("lng", $row['lng'] + $offset2);
$newnode->setAttribute("distance", $row['distance']);
$newnode->setAttribute("type", $row['type']);
$newnode->setAttribute("date", $row['date']);
$newnode->setAttribute("service", $row['service']);
$newnode->setAttribute("cost", $row['cost']);
$newnode->setAttribute("company", $company);
Observe que em latitude e longitude existe o deslocamento +. das 2 variáveis acima. Tive que dividir aleatoriamente por 0,1000 por 10000000 para obter um decimal que fosse aleatoriamente pequeno o suficiente para apenas mover os marcadores. Sinta-se à vontade para mexer nessa variável para obter uma que seja mais precisa para as suas necessidades.