Q:

time out expired issue in lambda method for contains

I have this code:
 string[] splits = keyword. Split(' ');

        var fproducts = (from products in db.tbl_Product
                         where splits. Any(item => products. Prod_Name_Fa. Contains(item) ||
                    products.shortDesc. Contains(item) || products. Prod_Code. Contains(item))
                         select products).Distinct();

if splits have 2 or 3 words it works but when I put 5 words in that I get time out expired error, 
Is there any other solution to search an array in a field ?  
Update:
this is the sql output : 
{SELECT 
    [Extent1].[ID] AS [ID], 
    [Extent1].[Register_Date] AS [Register_Date], 
    [Extent1].[tbl_VATID] AS [tbl_VATID], 
    [Extent1].[Prod_Name_Fa] AS [Prod_Name_Fa], 
    [Extent1].[Prod_Code] AS [Prod_Code], 
    [Extent1].[Prod_Description_Fa] AS [Prod_Description_Fa], 
    [Extent1].[Prod_Description_En] AS [Prod_Description_En], 
    [Extent1].[Prod_How_To_Use] AS [Prod_How_To_Use], 
    [Extent1].[Prod_Keywords] AS [Prod_Keywords], 
    [Extent1].[Prod_Model] AS [Prod_Model], 
    [Extent1].[User_Rating] AS [User_Rating], 
    [Extent1].[Admin_Rating] AS [Admin_Rating], 
    [Extent1].[Seen_Counter] AS [Seen_Counter], 
    [Extent1].[Is_Ashantyvn_Salable] AS [Is_Ashantyvn_Salable], 
    [Extent1].[shortDesc] AS [shortDesc], 
    [Extent1].[basePrice] AS [basePrice], 
    [Extent1].[Discount] AS [Discount], 
    [Extent1].[discountDateFrom] AS [discountDateFrom], 
    [Extent1].[discountDateTo] AS [discountDateTo], 
    [Extent1].[Sex] AS [Sex], 
    [Extent1].[Publish] AS [Publish], 
    [Extent1].[basePic] AS [basePic], 
    [Extent1].[suggestDate] AS [suggestDate], 
    [Extent1].[isSuggest] AS [isSuggest], 
    [Extent1].[homesuggestDate] AS [homesuggestDate], 
    [Extent1].[homeisSuggest] AS [homeisSuggest], 
    [Extent1].[suggestNum] AS [suggestNum], 
    [Extent1].[tagOrder] AS [tagOrder]
    FROM [dbo].[tbl_Product] AS [Extent1]
    WHERE  EXISTS (SELECT 
        1 AS [C1]
        FROM  (SELECT 
            N'رژ' AS [C1]
            FROM  ( SELECT 1 AS X ) AS [SingleRowTable1]
        UNION ALL
            SELECT 
            N'لب' AS [C1]
            FROM  ( SELECT 1 AS X ) AS [SingleRowTable2]
        UNION ALL
            SELECT 
            N'دو' AS [C1]
            FROM  ( SELECT 1 AS X ) AS [SingleRowTable3]
        UNION ALL
            SELECT 
            N'رنگ' AS [C1]
            FROM  ( SELECT 1 AS X ) AS [SingleRowTable4]
        UNION ALL
            SELECT 
            N'لوویو' AS [C1]
            FROM  ( SELECT 1 AS X ) AS [SingleRowTable5]) AS [UnionAll4]
        WHERE (( CAST(CHARINDEX([UnionAll4].[C1], [Extent1].[Prod_Name_Fa]) AS int)) > 0) OR (( CAST(CHARINDEX([UnionAll4].[C1], [Extent1].[shortDesc]) AS int)) > 0) OR (( CAST(CHARINDEX([UnionAll4].[C1], [Extent1].[Prod_Code]) AS int)) > 0)
    )}

A:

For best performance, I have to select just ID of the model not all, 
it should be like this : 
 string[] splits = keyword. Split(' ');

        var fproducts = (from products in db.tbl_Product
                         where splits. Any(item => products. Prod_Name_Fa. Contains(item) ||
                    products.shortDesc. Contains(item) || products. Prod_Code. Contains(item))
                         select products. ID).Distinct();

products. ID
and then select the records when equals these IDs.