What type of Opamp for a simple buffer?
Power supply:

You don't have to limit the current to 20mA. You just need a PSU that respects these parameters:





You have to take the current for the I/Os as well. Many LDOs will be capable of supplying this with ease. I suggest not taking 5V from GPIO as you mention, for many reasons, but instead from the 5V bus on the Arduino.

SPI:

You can use an IC dedicated to level translation. This document has extensive documentation on many products by TI. Page 12 lists SPI application specific ICs with different voltage ranges. I haven't checked extensively, but from that table it looks like TXB0104 could be a good option.

Maxim also has this app note with some recommendations, but I found their products a bit harder to source.