I would probably go for the Trigger in this situation, just to ensure that the calculations are performed as they should be during normal operations (assuming normal operations doesn't include bulk loading this table).

You should also consider putting a "billed" field on the TimeCardHours table, so that the trigger knows not to update the costs on that one...

As an evil way to do this, you could put the calculation in a user defined function and call that as part of your computed column. However, this would be entirely evil when used in a large data scenario. Functions are bad enough for performance, let alone ones which do data lookups.

(Irrelevant mental meandering - I now have Queen's Bohemian Rhapsody in my head. And I've got a three hour drive to get home, with no CD / MP3 player. I'll just have to see what the BBC can offer up...)