-j SNAT --persistent works only for a src/dst pair so when connecting to different destinations there's no guarantee that the same source will be used.
U32 tests whether quantities of up to 4 bytes extracted from a packet have specified values. The specification of what to extract is general enough to find data at given offsets from tcp headers or payloads.
As long as you want exactly 2^n IPs after transformation (here you want 2, so that's OK) it's then easy to use only 2^n (here 2) rules by checking the end of the original IP modulo 2^n and doing a selective SNAT from the result. The solution is then:
iptables -t nat -I POSTROUTING -s 10.0.0.0/16 ! -d 10.0.0.0/16 -m u32 --u32 '12 & 0x1 = 0x1' -j SNAT --to-source 22.214.171.124
iptables -t nat -I POSTROUTING -s 10.0.0.0/16 ! -d 10.0.0.0/16 -m u32 --u32 '12 & 0x1 = 0x0' -j SNAT --to-source 126.96.36.199
12 is the position of the source IP address in the packet
Please replace -I with a -A and all the /16 (you said many!) with any other size if needed.
If you don't know in advance the target IPs (188.8.131.52 and 184.108.40.206) then of course you'll have to use some variables in a script to replace the values (220.127.116.11 and 18.104.22.168)
If you had 4 available public IPs instead, you'd change the mask
& 0x1 to
& 0x3 and would use a total of 4 SNAT, one for each of the 4 possible results 1 2 3 0 . And so on...
Because there's no equivalent target extension rule it seems impossible with iptables to do a "generic" transformation on the target IP to use directly the result of the test in an unique rule.