For your sample data, this is close:
order by left(pattern, patindex('%[0-9]%', pattern)), patindex('%[0-9]%', pattern), len(pattern) asc, pattern
But you want all alpha to be last, so case is required:
order by left(pattern, patindex('%[0-9]%', pattern)), (case when pattern like '%[0-9]%' then patindex('%[0-9]%', pattern) else 999 end), len(pattern) asc, pattern
source share