Хранить отдельно цепочку патчей и отдельно последнюю версию. В итоге можно откатиться к любой версии, но без лишних телодвижений можно произвести операции над последней версией (поиск, вывод и т.п.).
А так как в 99% случаев будет нужна именно последняя версия (редко будут нужны предыдущие) - то это сильно снизит нагрузку, но не потеряет при этом версионность.
По-хорошему - вообще не давать пользователям никаких глобальных прав, в том числе и на создание баз данных.
Базы данных создаются отдельным инструментом, при создании - к ней выдаются нужному пользователю нужные права доступа. Практически все панели управления хостингом умеют так делать.
Я загружаемые юзерами файлы обычно называю по sha1 от содержимого, заодно и дедупликация получается в том случае, если два раза будет загружен один и тот же файл.
Причём хэш от файла просчитываю перед загрузкой ещё и на клиенте, чтобы можно было отловить дубликат, не загружая сам файл (на сервере обязательно хэш перепроверить, ибо клиент может намеренно солгать).
Использовать там поле, обозначающее порядок элементов. И при выводе сортировать по этому полю, при перемене мест - менять значения этого поля в строках местами.
Если из первого хэша получить второй никак нельзя, то никак не перенести. Разве что сделать поле вроде old_password и там хранить старый формат пароля, а при входе проверять, если у данного юзера есть старый пароль и он совпадает, то генерировать на его основе новый хэш. В итоге со временем хэши пользователей будут пересчитаны.