Dovresti usare le table function, tipo
SELECT blablabla
FROM materiale1, (SELECT * FROM immagini WHERE tipo_materiale='materiale1')
WHERE condizioni di join ecc.
Il che rende il join ancora più costoso, perché prima devi fare quella select includendo anche tutte le immagini.
Forse si può ottimizzare leggermente selezionando solo le chiavi delle immagini, per poi fare un secondo join a valle del primo per recuperare solo le immagini necessarie. Comuque sarebbe molto complesso valutare il miglioramento delle performance.
In definitiva, fai quantomeno una singola tabella con tutti i materiali. Poi se in quella tabella metti anche le immagini è meglio.
P.S.: in questo caso, la differenza nel tempo di esecuzione della query nelle varie situazioni non è di centesimi di secondo. A seconda delle cardinalità in ballo possono esserci differenze di secondi o minuti (volendo anche ore, ma suppongo che il tuo db non sia così grande).