Voor uw specifieke gegevens kunt u het volgende doen:
order by (case when cat_type = 'free' then id*1.0
else 2*id - 7.5
end)
Dit lijkt erg geheimzinnig. Als je een meer algemeen probleem hebt, moet je een andere vraag stellen, waarbij je een betere beschrijving geeft van wat je echt wilt bereiken.