För din specifika data kan du göra:
order by (case when cat_type = 'free' then id*1.0
else 2*id - 7.5
end)
Det här verkar mycket hemlig. Om du har ett mer generellt problem bör du ställa en annan fråga, som ger en bättre beskrivning av vad du verkligen vill åstadkomma.