Je moet echt ofwel alle gegevens converteren naar een gemeenschappelijke eenheid (zeg bytes) of een kolom toevoegen die een "maateenheid" bevat en de groottekolom zelf numeriek houden.
Dat gezegd hebbende, zou het volgende moeten werken voor gegevens die eindigen op GB/MB/KB of B.
select size
from t
order
by case when size like '%GB' then power(1024, 3) * substr(size, 1, length(size) - 2)
when size like '%MB' then power(1024, 2) * substr(size, 1, length(size) - 2)
when size like '%KB' then power(1024, 1) * substr(size, 1, length(size) - 2)
when size like '%B' then substr(size, 1, length(size) - 1)
end desc;
+-------+------------+
| size | bytes |
+-------+------------+
| 1GB | 1073741824 |
| 10MB | 10485760 |
| 100KB | 102400 |
| 1000B | 1000 |
+-------+------------+