La vida sería más fácil si todos sus términos estuvieran ordenados en orden ascendente.
Supongo que su aplicación real está usando una variable en lugar de una cadena codificada. Así que la solución debería verse así:
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