How to find the most common strings between rows
Please store the ingredients in a table not a list.  So let's call that ItemIngredient with two columns ItemId and Ingredient and leave it at that.  The primary key will be (ItemId, Ingredient).  Because searches by Ingredient will probably happen a lot, let's put a non-unique index on Ingredient (which is necessary for below to work the most efficiently).
SELECT
  ItemId
 ,MatchItemId
 ,IngredientMatchCount
 ,MatchRank
FROM
  (
    SELECT
      Base.ItemId
     ,Match.ItemId AS MatchItemId
     ,COUNT(*) AS IngredientMatchCount
     ,RANK() OVER (PARTITION BY Base.ItemId ORDER BY COUNT(*) DESC, Match.ItemId) AS MatchRank
    FROM
      ItemIngredient Base
    INNER JOIN
      ItemIngredient Match
        ON Match.Ingredient = Base.Ingredient 
             AND Match.ItemId &lt;&gt; Base.ItemId
    -- Put your WHERE clause here if you want to only fine matches for certain Ids
    GROUP BY
      Base.ItemId
     ,Match.ItemId
  ) matched
WHERE
  MatchRank &lt;= 1 --Or whatever
ORDER BY
  ItemId
    

You can experiment with RANK vs DENSE_RANK at some point to see what provides the best results for you.  If you need details about the Item you can join back in the outer query.