Я не знаю, как сделано на официале. Вполне м.б. что там два набора цифровых идентификаторов. Один - для идентификации в БД, другой - в игре. Это тот же вариант, что я предложил, дополненный цифровым индексом каждого объекта БД.
По скорости ничем не лучше варианта со строковыми именами, немного сложнее в обработке, проще - в переименовании (но оно на официале не практикуется, как я понимаю).
Твой вариант с выборкой первых незанятых индексов не проходит
1. Далеко не все объекты имеют счётчик их числа (петы, игроки, кланы). Хотя тут можно ввести доп. поле
2. Таблиц больше, чем одна. Придётся обходить их все. Полудюжина запросов на каждое изменение предметов. На загруженном сервере - очень накладно.
3. При интенсивной игре в таблицах будет гораздо больше пустых записей, чем занятых, что замедлит выборки. Вместе с третьим пунктом это может создать заметную нагрузку на сервер.
И, в любом случае, из-за пункта 1, потребуется модификация имеющихся БД. Так что лучше уже мой вариант вводить
… чтобы понять рекурсию, нужно сперва понять рекурсию …