How to remove Hash Match
ID Primary Key
table2ColID Foreign Key
table3ColID Foreign Key
Total# rows 1,612,728
NDX_Table2_Table2ColID
NDX_Table3_Table3COLID
Table 2
ID Primary Key
Desc
Total # rows 20
Table 3
ID Primary Key
Desc
Total # rows 7
That execution plan pattern is typical for a star join query, see this White Paper for the details.
The idea of introducing bitmap filters is to reduce the number of fact table rows returned by the scan by rejecting rows that cannot possibly meet the dimension table criteria early.
This approach is not effective in your case, because all rows pass the bitmap filters; the fact table scan returns 1,612,728 rows, which is the same as the table cardinality.
The bitmap plan also targets systems with a reasonable number of logical processors available. Your query executes on only two processors, making more available to the query would improve performance.
Ultimately, there's not a terrific amount of obvious improvement for a query that returns all rows from the fact table. Had the dimension table filters been more selective, the bitmap filtering would be more effective (particularly if the foreign keys are integer types).
Had the query been very selective, with suitable nonclustered indexes on the fact table, the optimizer might also consider more sophisticated approaches.