Você tem várias maneiras de acessar dados do magento:
-
usando load() => carrega TODOS os dados (atributos) relativos a um modelo. É muito lento e mata o desempenho. Para um produto, você deve usar um load() apenas na página do produto (porque todos os dados que você usará nessa página são relativos a um único objeto .. para que você possa carregá-lo por completo)
-
usando coleção => quando precisar recuperar uma lista de objetos, você deve usar (no mínimo) uma coleção. Cabe a você decidir a lista de atributos que deseja recuperar. Você pode adicionar atributo para selecionar/filtrar e a coleção conseguirá fazer as junções SQL às tabelas EAV etc... em segundo plano
-
usando SQL personalizado => coleção pode ser lenta ao lidar com objetos complexos (uma coleção inicializa muitas junções SQL na tabela que você pode não precisar) ... o último método para acessar dados do BDD é criar seu próprio SQL em seu ResourceModel
No script que você mostra, há um erro enorme:você carrega um modelo completo dentro de um foreach iterando em uma coleção. Você nunca deve fazer isso, se você tiver que carregar() o produto, suponho que seja porque você não encontrou um atributo na coleção ? Nesse caso, você só precisa modificar a coleção para recuperar o atributo...
Para um produto, por exemplo, o magento oferece uma maneira de adicionar (ou remover) automaticamente atributos a qualquer produto-> coleção que você instanciar. (veja a tag XML frontend/product/collection/attributes no config.xml do Mage_Catalog)