Thanks for the additional info.
This looks like a stats issue more than anything else to me.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | Cost (%CPU)| A-Rows | A-Time | Buffers | Reads | Writes | OMem | 1Mem | Used-Mem | Used-Tmp|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 8 | BITMAP CONVERSION TO ROWIDS| | 1 | 3263K| 2040 (0)| 10M|00:00:00.56 | 2863 | 0 | 0 | | | | |
| 10 | BITMAP CONVERSION TO ROWIDS| | 1 | 3263K| 6708 (1)| 166M|00:00:07.30 | 6784 | 0 | 0 | | | | |
We were expecting to carry a few million rows (E-rows) into these phases, but we ended up with 10M and 166M respectively.
So that is now going to be huge amount of "stuff" we will be carrying into the subequent joins (hence the performance cost, along with the nice big chunk of temp space used).
You might need a decent frequency histogram there.
There other thing of note is - bitmaps are awesome for equality/inequality predicates. If your date and numeric columns are going to used more for *range* predicates, it might be worth reviewing whether there is truly a benefit of bitmaps on these. They might be better off with either a standard index or no index at all.