Sembra che gli indici Gin si comportino bene. Se creo un indice Gin nella colonna degli indici, quindi cambio Join in
ON t.indexes @> jsonb_build_object('Id', c.indexes -> 'parentId')
E dove si va
WHERE t.indexes @> jsonb_build_object('Id', h.pid)
Non è veloce come l'indice puramente funzionale, ma almeno si aggiornerà dinamicamente e il piano di esecuzione non ha quell'ordinamento non necessario
Ulteriori miglioramenti delle prestazioni possono essere apportati aggiungendo il flag dell'indice gin jsonb_path_ops