Вариант 1.
Заменить IF на CASE:
(case when ABS(name) > 0 then LPAD(ABS(name), 4, '0' else name end) AS tord
Подробнее см. HQL документация .
Вариант 2.
HQL поддерживает нативные функции. Если вы инкапсулируете вычисления в пользовательскую функцию SQL, вы можете написать что-то вроде:
select t.*, paddNumber(t.name, 4) as tord from TableEntity t
where t.city = :city order by tord
Нет среды для проверки, но думаю, что каждая запись результата будет представлена как Object []. Где первый элемент будет содержать вашу сущность, а второй - tord.
Вариант 3.
Если возможно, переписать логику приложения. Существуют разные способы добавить требуемый отступ в поле name перед сохранением записи. Это удалит ненужные вычисления в БД во время сортировки.