PHP + MySQL: Как правильно сделать сортировку?
Добавьте поле ранг, которое будет отвечать за позицию. Позиция должна задаваться с определёнными промежутками. Например, первая запись — ранг = 100, вторая запись — ранг равен 200, и т.д.
Когда вы переносите запись Вам достаточно изменить ранг на середину промежутка между соответствующими записями. Например, первую запись вы переместили на 50 место, т.е. между 49 и бывшим 50, тогда Вам достаточно установить ранг для новой записи 4950. Остальные записи трогать не надо. 
Промежуток между записями выбирается в зависимости от частоты изменений + периодически необходимо производить выравнивание рангов.
Как вариант — pastie.org/1516344 (писалось на MySQL PL/SQL в учебных помыслах)