1) I don't know of a single location, but there are lots of ways to get there.
5x5 RGB is treated like a 15x5 really.
So with 20 IO pins you could control the whole thing directly:
15 pins driving RGB anodes for the columns, with a current sink per row to sink the current from 15 LEDs.
So drive 15 anodes, turn on row current sink, turn off row current sink.
Drive 15 anodes, turn on next row current sink, turn off row current sink.
repeat for remaining rows.
The data to be displayed is stored in a 15x5 array, read the array and send 0/1s to the 15 outputs.
This can be updated quite fast. I justbuilt the same recently for a 12x8 array, every 500uS the output is updated (see Blink without Delay).
The array is updated when serial data comes in periodically.
Large scale - do the same with beefier drive if you need brighter LEDs or are using more of them.
2) Well, I guess the above partly covers that. Make your design from ATMega1284, have 32 IO to use (so 20 free, plus a couple for serial, buttons, etc), and have 16K SRAM for manipulating patterns, jumping between patterns, etc.
Or use a smaller part like '328 and use SPI commands to load 2 shift registers to drive the anodes, and 1 more for the cathodes.
Shift registers can be accessed individually (shared SCK, MOSI, "latch", unique chip select), or the 3 can be daisy chained (shared SCK, "latch", chip select, serial data is daisy chained (MOSI to chip 1 Serial Data in, Serial data1 out to Serial data2 in, Serial data2 out to Serial data3 in)