Если поиск в массиве осуществляется через foreach, то грош цена такому массиву.
Сила массива в том, что доступ к элементу можно осуществлять по индексу, то есть практически моментально. Так что для оптимизации старайтесь делать именно это. То есть обратите внимание на то, какой критерий поиска вы используете, а не что вам нужно извлечь. Ведь при доступе к элементу (который является объектом или структурой), вы и так получите доступ ко всем его свойствам, основное время тратится именно на поиск. Например, если поиск по какому-то уникальному свойству (артикулу, например), то можно сделать ассоциативный массив, ключом которого является именно артикул.
Конечно, на формирование массива тоже тратится время, какой бы оптимизированный поиск ни был. Поэтому супер большие массивы - тоже признак плохой оптимизации. Не зря же придумали базы данных. А что если в базе не 30 тыс. товаров, а миллиард? Тоже загоните их в массив? Надеюсь, что нет, а вместо этого будете пользоваться средствами поиска самой базы данных.
Но если всё же оптимизировать создание массива наравне с последующим поиском по нему, то нужно будет углубиться в суть задачи, а также изучить, какие вообще есть структуры данных в PHP, какие у них плюсы и минусы, как они устроены на низком уровне, и как на их основе сделать более совершенные структуры данных (конкретно для вашей задачи).