As far as I know, Oracle performs the sort operations in PGA. But does it also do that in Buffer Cache or Shared Pool etc? If so, in which conditions does it sort in these areas?
No, its always in the PGA. But there is the question of semantics here.
For example, if using the full automatic memory management, then we reserve the right to shuffle data between shared memory areas and private memory area. So the same piece of physical memory that was once in shared memory could become private memory later in its life. But by that moment in time ... its now PGA.
Also, if we can read data in the requested order without the need to sort it, then it will be delivered "pre sorted" to the client from the buffer cache because we never needed to sort it.
But as I said - that just interpretation. For all intensive purposes, you can assume that PGA is where sorting happens.