PROGMEM: do I have to copy data from flash to RAM for reading?
AVR is a modified Harvard architecture family, so code is stored in flash only, whereas data exists primarily in RAM when being manipulated.

With that in mind, let's address your questions.


  Why on earth do I have to copy the damn content to RAM before accessing it?


You don't need to per se, but by default code assumes that data is in RAM unless the code is modified to specifically look in flash for it (such as with strcpy_P()).


  And if this is true, what happens to all the code then? Is it also loaded to RAM before execution?


Nope. Harvard architecture. See the Wikipedia page for the full details.


  How is the code (32kiB) handled then with only 2kiB RAM?


The preamble generated by the compiler copies the data that should be modifiable/modified into SRAM before running the actual program.


  Where are those little goblins carrying floppy disks?


Dunno. But if you happen to see them then there's nothing I can do to help.


  ... are 5, 10 and 7 really copied to RAM before loading them into registers?


Nah. The compiler evaluates the expression at compile time. Whatever else happens depends on the lines of code around it.