To find rows where at least three out of four of those columns match you can use.

    SELECT  D1.ID, D2.ID
    FROM   DATA D1
           JOIN DATA D2
             ON D1.SSN = D2.SSN
                AND D1.ID > D2.ID
                AND 2 <= CASE
                           WHEN D1.FNAME = D2.FNAME THEN 1
                           ELSE 0
                         END +
                         CASE
                           WHEN D1.LNAME = D2.LNAME THEN 1
                           ELSE 0
                         END  +
                         CASE
                           WHEN D1.DOB = D2.DOB THEN 1
                           ELSE 0
                         END
    UNION ALL
    SELECT D1.ID, D2.ID
    FROM   DATA D1
           JOIN DATA D2
             ON D1.DOB = D2.DOB
             AND  D1.FNAME = D2.FNAME
             AND  D1.LNAME = D2.LNAME
             AND D1.SSN <> D2.SSN
             AND D1.ID > D2.ID

The top branch gets all rows where the `SSN` are the same and at least 2 out of the three other columns are the same. The join on `SSN` is likely to be pretty selective in itself.

That just leaves one other possible three column combination left which is dealt with by the second branch.

Both branches of the `UNION ALL` have an equi join so it should perform better than a join with some complicated `OR` condition.