Не существует простой, удобной в использовании структуры данных, поддерживающей эффективный полнотекстовый поиск.
Но нужна ли вам эффективность? Это настольное приложение или веб-приложение? В первом случае не беспокойтесь об эффективности: современный процессор может выполнять поиск в мегабайтах текста за доли секунды - просто просматривайте все описания, используя String.contains()
(или регулярное выражение, чтобы обеспечить более гибкий поиск).
Если вам действительно нужна эффективность (например, для веб-приложения, в котором многие люди могут одновременно выполнять поиск), загляните в Apache Lucene .
Что касается ваших ArrayLists, кажется странным использовать один для описания одного изображения. Почему список, что представляет индекс? Линии? Если это так, и если вам действительно не нужен прямой доступ к строкам, замените списки простой строкой - она может содержать символы новой строки просто отлично.