Using your example couldn't you do something like this
SELECT h.*
FROM zipcodes g
JOIN zipcodes h ON g.zipcode <> h.zipcode
AND g.zipcode = '10028'
AND h.zipcode <> '10028'
WHERE g.GeogCol1.STBuffer(20 * 1609.344).STIntersects(h.GeogCol1)
--STBuffer would...