La vie serait plus facile si tous vos termes étaient triés par ordre croissant.
Je suppose que votre application réelle utilise une variable plutôt qu'une chaîne codée en dur. La solution devrait donc ressembler à ceci :
select city, postcode, name
from dealers
where name = p_search_term OR
postcode = p_search_term OR
city = p_search_term
ORDER BY case when postcode = p_search_term then p_search_term else 1 end desc
, case when name = p_search_term then p_search_term else city end asc