плохо понятно, что зачем- но Firebird соответственно отсортировать при выдаче результата не сможет, т.к. индекс должен быть построен по истинному значению поля а не по hash.
есть 3 решения:
1. в вычисляемое полк дешифруем ваше значение и сортируем в программе (на клиенте): DataTable.Filter:='FIELDNAME',DataTable.Filered:=true;
2. незамарачиваемся на шифрование (ибо ваш шифратор влегкую будет вскрыт сколько нибудь вдумчивым профи) и храним все в открытом виде
3. будет работать почти так же как и у тебя медленно, ток на сервере (написать UDF для дешифровки на сервере)
есть еще 4-й вариант: написать свою внешнюю функцию для FB, дешифрующую значение и работать с ним прямо в БД.
Есть и пятый вариант. Дешифруйте во временную таблицу и работайте с ней. После завершения работы таблицу убить.