select  descrL as division, product
from Lower 
where DescrL like @params + '%'
union
Select descr, product
from Upper
where Descr like @params = '%'
これは非常にパフォーマンスが高いでしょう。一致が上部の選択で見つかった場合、それはすべてのユニオンではなくユニオンであるため、下部の選択では抑制される必要があります。inの代わりにlikeに注意してください。inを実行する場合、結果を見つけるためにDescrLまたはDescrのインデックスを使用する方法はありません。あなたが好きなら、インデックスはうまく使われます。それを機能させるには、アプリケーションロジックを調整する必要があるかもしれません。  
それができない場合は、この解決策があります。データベースにfn_splitを追加する必要があります。  http://msdn.microsoft.com/en-us/library/aa496058(v=sql.80).aspx
    select  descrL as division, product
    from Lower l 
    join dbo.fn_Split(@params, ',') p1
        on l.DescrL = p1.value
    union
    Select descr, product
    from Upper u 
    join dbo.fn_Split(@params, ',') p2
        on u.Descr = p2.value
パフォーマンスの最後のビットを本当に引き出したい場合は、テーブル変数を宣言し、fn_splitを1回だけ実行してテーブル変数にデータを入力してから、2つの結合をテーブル変数にすることができます。したがって、ここでは、列のインデックスも利用しています。これは、クエリを高速化するために必要な主なものです。SQL Serverを実行するときは、常に「実際の実行プランを含める」ことを行い、結果を確認して、テーブルスキャンではなくインデックスシークが表示されていることを確認してください。  
編集:私はあなたのsqlfiddleリンクに行きました。以前は見ませんでした。これは機能します。申し訳ありませんが、あなたも部門を選択しているので、組合自体は重複を抑制しません。したがって、not inを使用するか、私が好むように、nullの場合は左アウターを使用する必要があります。  
select descrL as division, productL as product
    from Lower l 
    join @params p1
        on l.DescrL = p1.division
    union
    Select u.descr, u.product
    from Upper u 
    join @params p2
        on u.Descr = p2.division
    left join (select productL as product
                from Lower l2 
               join @params p3
                 on l2.DescrL = p3.division) sub1
     on u.product = sub1.product
        where sub1.product is null
order by 2