Я решаю этот тип проблемы с помощью подзапроса. Внутренний запрос имеет как DisplyName, так и SortIndex.
Внешний запрос отображает имя, но сортирует по индексу.
* 1003 например *
select a,b,c DisplayName from
(select a, b,c, DisplayName, SortIndex....
) as Temp
order by Temp.SortIndex
Вы можете использовать этот общий подход с любым количеством полей, просто добавив пару отображения / индекса