Per i tuoi dati particolari, potresti fare:
order by (case when cat_type = 'free' then id*1.0
else 2*id - 7.5
end)
Sembra molto arcano. Se hai un problema più generale, dovresti porre un'altra domanda, fornendo una descrizione migliore di ciò che vuoi veramente ottenere.