The 8Ohm speaker will have the potential to be louder than the piezo buzzer, but the Arduino will not be able to drive it directly. The speaker can be driven, using a transistor, but it's only rated to 0.5W and there's a risk it will blow up with a 5V power supply, if it's operated continuously, without anything to limit the current. P = V2/R = 52/8 = 25/8 = 3.125W.
This is not correct at all.
The 5V is peak to peak which means that the RMS voltage is half of the voltage divided by sqrt(2) = 1.77Vrms
At 8ohms, this will give you P=Vrms^2/R = 1.77^2/8 = 0.4Wrms
You could get some more when using a bridged amplifier, in that case you get twice the RMS votlage.
So; 3.55^2/8=1.6W
(so yes, four times as much because the power of two).
No that's wrong.
The calculations you've just done only apply to an amplifier with a sine wave output. A microcontroller's I/O pin, outputs a square wave. The maximum RMS output current of a microcontroller I/O pin is simply equal to its DC rating, because it outputs a square wave. Practically speaking this may be different, for example if the pin is outputting a 50% duty cycle and only one of the transistors is being used, the RMS current will be half the rating, but using both transistors or 100% duty cycle, the maximum RMS current is equal to the DC rating.
With a very high efficient Class-D amplifier you need to deliver 15% extra, so say 2W to round it up.
Witch a Class-AB (or B), your efficiency is around 60-70%
A class-A is even worse (like 30-50% or so)
That's true, but is completely irrelevant here, as the original poster is talking about driving a load from an MCU output pin, not a linear amplifier, be it class AB or D.
EDIT:
See attached simulation. V1 and V2 represent differential outputs. The RMS current through the 8Ohm resistor is 625mA and the power dissipated 3.125W. If only one square wave source were used, with the other end of R1 connected to 0V, the power would halve to 1.5625W, but there would be 2.5V of DC across it, which would do nothing but heat the voice coil, if it were a speaker. Using one squarewave source and an AC coupling capacitor would reduce the power to half again, at 0.78125W, but the sound output would not change, since the DC component will be blocked.
To drive a 0.5W 8Ohm speaker from an Arduinp I'd recommend using a pair of emitter followers and an AC coupling capacitor. The output power will be around 400mW, thanks to the voltage drop of the emitter followers, which should be loud enough. There should be a decoupling capacitor next to the driver transistors, which isn't shown.