It’s been several years since I started telling people that one of the solutions to dealing with optimizer problems was to adjust (or create) stored statistics using the dbms_stats procedures set_column_stats(), set_index_stats(), and set_table_stats().
Imagine my surprise to discover an old (2003) Metalink note confirming my claim that it is perfectly reasonable to take this approach. If you have an account, you will find a demonstration script in note 157276.1. [Updated from time to time: currently the relevant doc id is 1276174.1, with 130899.1 as a little bonus]
There’s also a note (dated Nov 2002) which contains a tidy looking script for reporting object statistics at the object, partition, and subpartition level. I haven’t tested it yet, but you might find it useful. The note number is 31412.1