Arduino to Raspberry Pi wired communication
Hands down, I can rule out the I2C. This post sums it all up:


  
  SPI is faster.
  I2C is more complex and not as easy to use if your microcontroller doesn't have an I2C   controller.
  I2C only requires 2 lines.
  


Since speed is your first priority, either do USB or SPI. I'd personally go with USB, just for the reason that it's simple. Nearly any programming language can inference with COM ports, but that's not the case with SPI. Also, for SPI, you would have to either use a level shifter, or do a voltage divider for the Arduino to RPi wires (for RPi to Arduino wires, Arduino can still sense 3.3V as HIGH.)

Also, serial can be pretty fast. Technically, the Arduino can go up to 2 Mbps (not very fast compared to a lot of things, but fast enough for what the Arduino can even handle). One thing to note, the writer of the post stated that this is the highest you can practically achieve with the poorly optimized libraries:

Serial.begin(500000);