ну да точно, только все что вы тут написали уже реализовано в фунции order by. И как бы не дураки писали, тоже понимали что сортировка определяется весом сравниваемых значений. Для этого написали отдельно функцию и отдельно правила сравнения. итак функция есть осталось определить правила - collation. После зарегистрировать collation в таблице и все готово, больше делать ничего не нужно, особенно править селекты. Учтите что вышеперечисленные методы - накладные расходы.
Примечание по накладным расходам.
Считайте сами, для каждой строчки выборки перед order by будет выполняться функция FIELD(col, \'RB\', \'RE\', ..).
я не думаю, что можно хранить индекс по результату функции или по функции.
можно конечно не сортировать во время выборки а использовать уже установленную кемто сортировку. Переодически эту сортировку корректировать джобом или триггером после инсерт, делейт, апдейт. ну это опять же накладные расходы хотя и не заметные для конечного пользователя.