Just wanted to add that it's also easy to keep most of the encoded address the same while changing the hash completely, for example :
FFE70FB0B47E80EBDC1CC4C3C59581110A10D52B
0469804540E7B2C646007EFA8C3BF4FBE146E931
Will result in :
1QL67LXU5LS8uoKCXDAy4bbgWY7ue2nHTA
1QL67LXU5LS8uoKCXDAy4bbgWY7uJFBhq
Of course it's hard to do this trick if I have to right-align the addresses

Good point. Every single character of an address should be checked before use, especially for any non-trivial transaction amount. At just 35 or so characters, that's not too much to ask.
I worked on an idea about 10 years ago to generate a kind of "visual hash" that would basically change drastically with a small change in input. The idea was to basically hash an object of interest (in this case, you would hash the base58 address itself) and then use the bits of the hash as a kind of program to generate a fractal pattern similar to an L-system. This would give rise to a very visually unique flower/snowflake pattern. Something like
this but more colorful. Maybe I'll buckle down, learn Python and give it another go.
Prior work.