This is a basic layout where you can have bidirectional exploration of a one-to-many relationship.
When you select an item in one of the lists, the top list of the other side displays the relevant items.
This could be solved with just the two lists if you highlighted the relevant items on the other list, instead of grouping them together, but with a hundred ingredients some of them are bound to be out of view and you don't want the user scrolling and looking for them.
You can either fix the bottom lists in place, resorting to scrolling within the top lists when they're too long for the allocated space - or you can adjust the position of the bottom lists dynamically, always displaying the top list to its full height, but then the bottom lists will be always jumping up and down as you work.
Another solution is to only display one of the top lists at a time, and to have the user select whether he wants to explore ingredients by recipes or recipes by ingredients. But that's a bit more difficult to understand and more cumbersome to operate.
download bmml source – Wireframes created with Balsamiq Mockups