За вашите конкретни данни можете да направите:
order by (case when cat_type = 'free' then id*1.0
else 2*id - 7.5
end)
Това изглежда много тайнствен. Ако имате по-общ проблем, трябва да зададете друг въпрос, като дадете по-добро описание на това, което наистина искате да постигнете.