When I encouter
WHERE (A = 1 OR B = 2)
AND C = 3
I have often found that a UNION (to avoid the OR) is faster - particularly if I can use a UNION ALL.
With your 53 different fields not sure if that is going to be any use though ...
How often is
(VW.fieldA IS NULL OR P.fieldA IS NULL OR VW.fieldA = P.fieldA)
TRUE - is that the majority, or minority, or "very rare"?
Is one of the fields being NULL more rare than then fields being EQUAL?
I'm just wondering whether it is worth doing something like
INSERT INTO #TEMP
SELECT PKeyCol1, PKeyCol2,
[FlagFieldA] = CASE WHEN VW.fieldA IS NULL THEN 1 ELSE 0 END,
[FlagFieldB] = CASE WHEN VW.fieldB IS NULL THEN 1 ELSE 0 END,
...
FROM MyTable AS VW
so that on the first pass we gather all the NULL states. It would be helpful to know if ALL FlagFields are 1 - by having some sort of [AllFieldsSet] column. Once all FlagFields are 1 then the row needs no further processing - it is a match.
Then on second pass only process rows where [AllFieldsSet] = 0 and set columns to 1 if P.FieldX IS NULL AND #TEMP.FlagFieldX = 0
Might just be possible that this beats SQL's query planner ... but ... in the main, of course, it doesn't happen that some programming-around is quicker than the Query Planner.
Second thought:
Take the rarest event that is likely to be true. Let's say that is FieldC
INSERT INTO #TEMP
SELECT *
FROM
(
(
SELECT PKeyCol1, PKeyCol2
FROM MyTable AS VW
WHERE VW.fieldC IS NULL
UNION
SELECT PKeyCol1, PKeyCol2
FROM MyTable2 AS P
WHERE P.fieldC IS NULL
) UNION ALL
SELECT PKeyCol1, PKeyCol2
FROM MyTable AS VW
JOIN MyTable2 AS P
ON P.fieldC = VW.fieldC
) AS X
and then JOIN #TEMP to the other FieldY tests to reduce the number of rows that are compared.