order-by句で関数を使用できます。この場合、フィールドの非数値部分と数値部分を分割して、それらを2つの順序付け基準として使用できます。
select * from t
order by to_number(regexp_substr(a,'^[0-9]+')),
to_number(regexp_substr(a,'[0-9]+$')),
a;
これをサポートする関数ベースのインデックスを作成することもできます:
create index t_ix1
on t (to_number(regexp_substr(a, '^[0-9]+')),
to_number(regexp_substr(a, '[0-9]+$')),
a);