See Set difference: find distinct members for two groups in Tableau Desktop for a start one of several possible approaches. The crux is writing an aggregated calculated field that calculates whether an order id contains both items of interest.
You can use that calculation in a set or directly in a view where order id is a dimension.
An example would be:
count(if item = "eclair" then 1 end) > 0 and count(if item = "Eccles cake" then 1 end) > 0
This (aggregated) calculation returns true for orders that have at least one eclair item and at least one Eccles cake item, false for other orders.
For this to work, you need Order ID as a dimension in your view, but not item, so that the calculation is applied to all the items in an order at one time. That answers the question you posed, but displays one row per order instead of one row per order/item.
If you really need the exact output form you specified, then you turn this calculation into an LOD calc, such as:
{ FIXED [ORDER ID] : count(if item = "eclair" then 1 end) > 0 and count(if item = "Eccles cake" > 0 then 1 end) }
Then you display a column next to each order id/item to indicate whether or not the order contained both an eclair and a cake. (Which is also not exactly what you show as desired output) or use this new field along with the the current item to define a final calculation that is 1 if and only if the item is cake and the order contains both.
This evaluates to true and false. I presume you can convert to 1 and 0 if needed.