I wouldn't go for option 3. I don't know if it will improve any performance, but it will definitely cause extra headache compared to star schema or database joins.
Option 1 with a table is a good approach only if it stores processed or aggregated data. But then you have to factor in the time spend building or updating the table, unless that is not an issue, i.e. can be scheduled overnight.
Option 2 is what I use all the time. I only have to wait once - for the extract to be created. After that the development is fast on the extract, and once the viz is published, the extract refresh is scheduled overnight - so it is not an issue. With version 7 data server feature you can publish one extract and share it between many workbooks - no need to run duplicate extracts.