ho risolto con:
select `cat_id`, `cat_nome`
from cat where `cat_sub` = 0
union
SELECT cat2.cat_id,
concat(cat.cat_nome,' -> ',cat2.cat_nome) as nome
FROM `cat`
inner join cat as cat2 on cat.cat_id = cat2.cat_sub
order by cat_nome asc
dite che c'è qualcosa di più performante ?