Я видел, что использование connect by может быть медленным, но по сравнению с чем? На самом деле нет другого варианта, кроме создания результирующего набора с использованием рекурсивных вызовов PL / SQL (медленнее) или выполнения на стороне клиента.
Вы можете попытаться разделить ваши данные на отображение (определение иерархии) и таблицы поиска (отображаемые данные), а затем объединить их обратно. Полагаю, я не ожидал бы большой выгоды, если бы вы получали данные иерархии из проиндексированных полей, но это стоит попробовать.
Вы уже пробовали использовать соединение? Я большой поклонник пробовать разные варианты.