Prima di tutto, metto in dubbio l'uso di un join esterno visto che l'ordine di sta operando sulla destra, ed è probabile che i NULL iniettati dal join sinistro creino il caos con esso.
Indipendentemente da ciò, l'approccio più semplice per accelerare questa query sarebbe un indice di copertura su pb.id_brand e pb.brand. Ciò consentirà di valutare l'ordine da 'utilizzando l'indice' con la condizione di unione. L'alternativa è trovare un modo per ridurre la dimensione del risultato intermedio passato all'ordine.
Tuttavia, la combinazione di outer-join, order-by e limit, mi fa chiedere che cosa stai esattamente chiedendo e se potrebbe non esserci un modo migliore per esprimere la query stessa.