Как сделать так, чтобы по нажатию на итем в ListView открывался диалог с нужной мне информацией?
Короче начни с того, что выкинь ListView. Забудь о нём, как будто его не существует. Он учит плохому, все эти ArrayAdapter'ы - зло, за ними не видно, как надо делать правильно.
Возьми RecyclerView. Он покажется тебе сложнее, но он заставит тебя делать правильнее.
Уйди от списка строк. Список строк это ничто, нет у строки "эспрессо" никакого состава. У тебя должна быть моделька, POJO, в котором хранятся твои данные для одного элемента списка. В твоём случае это одна строчка? Прекрасно, это будет класс с одним полем. Дальше ты в этот же класс добавишь ещё одно поле - айди(id) этого элемента. По айди ты должен уметь однозначно получать и имя, и список ингридиентов. 
Дальше, когда ты напишешь кастомный адаптер к RecyclerView, тебе нужно будет проставить onClickListener на вьюхи. нажатия этого листенера ты должен прокинуть в свой интерфейсinterface CoffeeSelectionListener {
    void onCoffeeSelected(int coffeeId);
}
Этот интерфейс-листенер должен приходить в твой адаптер снаружи, таким образом ты абстрагируешься от конкретного действия. И это хорошо.
Снаружи проставь листенер, и по айдишнику находи список ингридиентов. Дальше показывай его.
Упаси бог тебя показывать в AlertDialog'e. Возьми DialogFragment, потрать время, но сделай нормально. Никто уже не пользуется диалогами.
Когда ты это сделаешь у тебя получится чуть-чуть лучшего качества код. Дальше надо будет абстрагироваться ещё.
Ну, если по быстрому: в Java есть такая структура данных Map - хранит списки в виде ключ, значение.
Например:
(Американо)(Кофе, Вода)
(Капучино)(Кофе, Молоко)
Создайте такой словарик. Когда пользователь кликнет капучино, методом get("капучино") у этой мапы вытяните список ингредиентов.