Pro vaše konkrétní data můžete udělat:
order by (case when cat_type = 'free' then id*1.0
else 2*id - 7.5
end)
Zdá se to velmi tajemný. Pokud máte obecnější problém, měli byste se zeptat na jinou otázku, která by lépe popsala, čeho chcete skutečně dosáhnout.