con quella query non gli stai dicendo nulla riguardo l'ordinamento per cui usa cio che gli è ovvio usare, la chiave primaria.
se il tuo scopo è avere prima i dati del id 3 poi quelli del 2 poi quelli del 4 ecc..
non puoi far altro che usare 3 select in union
cioè

select * FROM table WHERE id = 3 or id = 2 order by id desc
union select all * FROM table WHERE id = 4
union
select all * FROM table WHERE id = 1