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