I love the idea of going from N^2/2 to N. Unfortunately, the valid pairs are not the bitwise negated value; it could be that one, but also other values that don't have all the possible (negated) bits set.

I ended up using your idea of shifting off the least significant bit (saved some time doing !($i1 & $i2) instead of ($i1 & $i2) == 1).

The criteria to be in the list is complex (and I don't want to go off-topic). The numbers are highly constrained, yet once they make it to the list, I need to find all pairs of numbers which do not share any common bits (after getting rid of the one shared lsb).
Below is an example of a valid pair. The bit-wise complement may or may not exist in the list.

#all values have been right shifted to get rid of lsb
$i1 = 0b1010_0100;
$i2 = 0b0100_1000;
#the above two numbers are a valid pair.
# yet my list may not contain either ~$i1 or ~$i2
$i1_bits_reversed = 0b0101_1011;
$i2_bits_reversed = 0b1011_0111
# the above two numbers are not a valid pair,