Always use -O or above (-O1, -O2, -Os, etc.). At the default optimization level, gcc goes for compilation speed and doesn't do enough analysis to warn about things like unitialized variables.
Consider making -Werror policy, as warnings that don't stop the compilation tend to be ignored.
-Wall pretty much turns on the warnings that are very likely to be errors.
Warnings included in -Wextra tend to flag common, legitimate code. They may be useful for code reviews (though lint-style programs find a lot more pitfalls are more flexible), but I wouldn't turn them on for normal development.
-Wfloat-equal is a good idea if the developers on the project are unfamiliar with floating point, and a bad idea if they are.
-Winit-self is useful; I wonder why it's not included in -Wuninitialized.
-Wpointer-arith is useful if you have mostly-portable code that doesn't work with -pedantic.