(3) первым циклом запихиваешь в соответствие ключом номенклатуру, значением - строку списка. в этом же цикле массив номенклатур и очищаешь текст в строках.
далее - 1 запрос, получающий все данные, с отбором по массиву, полученному в первом цикле.
при обходе выборки по ключу соответствия устанавливаешь значения текста соответствующих строк.
(5) Можно и через ТЗ, но соответствие, вроде, быстрее (см. 4)
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший