Golf a Solubility Chart
JavaScript (Node.js), 143 bytes

Returns 1 for soluble, 0 for insoluble.

s=&gt;Buffer(`## 5)6.'04+ n:# (F* E"/$;&amp;-"/"7&amp;#.%`).map(c=&gt;S+='1'.repeat(c-32)+0,S='')|S[parseInt(s.split` `[1].slice(1,7)+s[0]+s[1],35)%1325%508]


Try it online!

How?

Conversion of the input string to a lookup index

We first build a key by extracting the 2nd to 7th characters of the anion and adding the two first characters of the cation:

key = s.split` `[1].slice(1, 7) + s[0] + s[1]


Examples:

'Lithium Fluoride'  --&gt; 'luoridLi'
'Sodium Fluoride'   --&gt; 'luoridSo'
'Sodium Dichromate' --&gt; 'ichromSo'
'Calcium Oxide'     --&gt; 'xideCa'


We turn this into a lookup index by parsing it in base-35 and applying a modulo 1325 followed by a modulo 508 (brute-forced values):

parseInt(key, 35) % 1325 % 508


Compression of the lookup table

Because there are significantly more soluble pairs than insoluble ones, we  fill all unused entries in the lookup with soluble.

By encoding soluble with 1 and insoluble with 0, our lookup table essentially consists of long strings of 1's followed by a 0:

11101110011111111111111111111101111111110111111111111111111111101111111111111101111111011111
11111111111011111111111111111111011111111111001111111111111111111111111111111111111111111111
11111111111111111111111111111111011111111111111111111111111011100111111110111111111111111111
11111111111111111111011111111110011111111111111111111111111111111111110110111111111111111011
11011111111111111111111111111101111110111111111111101101111111111111110110111111111111111111
11111011111101110111111111111110111110


We compress it by storing the lengths of the strings of 1's as ASCII characters in the range [32-126].