Надо посмотреть как часто игроки сморят на рейтинг и попробовать организационно решить. Например отвязать рейтинг от очков в игре и ввести "магический" прогресс-параметр (темп набора очков) . Тогда, по сути, точно ли ты посчитал место в рейтинге или нет -- пользователю проверить уже невозможно. Кроме того, можно предположить, что те кто с 1-го по 1000-ое место, интересуются своим рейтингом более серьезно, чем те что с 100000-го по 500000-е... И тогда простор и раздолье, как все можно реорганизовать. Например, раздели пользователей на группы -- Гуру, Профи, Салаги, Микроорганизмы (причем поделить можно по частоте обращений к рейтингу) -- для каждой группы своя таблица (можно даже в БД на отдельной ноде), а в таблицу пользователей добавь указатель к какой группе он принадлежит... Соответственно очки пиши в обе таблицы (это быстро), но индекс будет только на той таблице, что поменьше... При запросе рейтинга показывать пользователю, место в рейтинге только в его группе, а делать "большую сортировку" и раскидывать по группам -- раз в день во время низкой активности...
Вариантов такой организационной переделки для снижения нагрузки может быть много. Возможно я не прав, но не всегда имеет смысл решать техническую задачу в лоб.