Mais rápido, mais simples? use
* 1
select *
from tbl
order by number_as_char * 1
Os outros motivos para usar
* 1
é que pode - sobreviver a alguns contratempos horrendos com underflow (precisão decimal reduzida ao escolher o que converter)
- funciona (e ignora) colunas de dados puramente não numéricos
- remove porções numéricas de dados alfanuméricos, como 123A, 124A, 125A