Something like this perhaps:
select *
from (
VALUES (N'1000 apples')
, (N'500 apples')
, (N'10 apples')
, (N'10 bananas')
, (N'Container 100')
, (N'Box 10')
, (N'Container 1000')
, (N'Container 123')
, (N'Container xyz')
, (N'Container')
) t (col1)
cross apply (
select
left(col1, NULLIF(charindex(' ', col1), 0) - 1) as leftWord
, right(col1, NULLIF(charindex(' ', reverse(col1)), 0) - 1) as rightWord
) b
order by case when leftword not like '%[^0-9]%' then cast(leftWord as bigint) else 9999999999 end
, case when rightword not like '%[^0-9]%' then cast(rightWord as bigint) else 9999999999 end
, leftword
, rightword
, col1
This sorts from "both sides" of the word, if you don't want sort from right numbers, just remove the rightword case when.