But this doesn't always work and you still need to be good at adding/subtracting.
But this doesn't always work and you still need to be good at adding/subtracting.
It does always work. If you mean that not every integer product can be written this way, you're right; 23 × 46 can't, unless you're willing to memorise squares of half-integers. But, if avoiding non-squaring multiplication is really key, then you can still just write 23 × 46 = 23 × 47 - 23, and then compute 23 × 47 = 35^2 - 15^2 as you suggest.
Or one of several similar formulae, but each has its own pros and cons.
Sure, of course that works algebraically, though this method will always involve at least one bigger square, and division by 4, which, if working in base 10, can be implemented with exactly the computational complexity of multiplying by 25—so perhaps is also meant to be avoided, if we're trying to avoid multiplication! As you say, there are pros and cons of all approaches, including just doing the multiplication.
I wonder what real integer multiplication hardware uses.