I think i got a audio bar graph on an HD44780 once. Using each pixel column.
From memory, some of the HD44780 models will let you do some tricky stuff where you can load a custom character into them, then display the character and that character will be in the display RAM, and wont get updated.
Allowing you to load a new character into the same custom character RAM location, then telling the display to display that character.
This may be per row, So you load 8 custom characters in, display the row,
move the cursor, then load a new 8 character in, then display them in the lower row.
I was able to get a much faster update rate out of it than what the pixels would update. So there may be other ways around you issue with just pooling it really fast.
You should also be able to read the existing characters, let your code flip them, then re-upload the custom character to the RAM. That way you don't need to store the characters anywhere, and minimal code to flip them.