Предполагая, что начальная буква номера заказа может отличаться от 'O', используйте regexp для разделения буквенной и числовой частей и сортировки по каждой части.
with orders (id,order_num,country,cstm_id) as
(values
(1 , 'O-1' , 'DE' ,1)
, (4 , 'O-2' , 'AT' ,2)
, (5 , 'O-3' , 'DE' ,2)
, (6 , 'O-5' , 'AT' ,2)
, (8 , 'O-6' , 'DE' ,3)
, (10, 'O-10' , 'DE' ,3)
, (11, 'O-11' , 'AT' ,3)
, (12, 'O-123', 'DE' ,1)
)
select *
from orders
order by regexp_replace(order_num, '^([A-Z]+)-(\d+)$','\1')
, regexp_replace(order_num, '^([A-Z]+)-(\d+)$','\2')::integer ;