Greetingz!
For the specifics about -O3,
check here. It's a section of the
main GCC documentation.
Basically, it's the same as -O2, but "more intense".
EDIT: That documentation details exactly what flags are enabled. The -O# series of compilation options being 'aliases' to a predefined set of flags. The documentation goes over each of the individual flags as well.
2nd EDIT: As for why anyone would willing set -O3, its because we like to squeeze every drop of
blood performance out of our code (or we like watching things explode).