If I set g=2 then my whole system freezes regardless of i / tc. On my 280X it has a significant impact on performance (more so than lookup-gap).
That's probably because the TC value is too high and the thread is being put into dynamic GPU memory (Aka system ram, which if there isn't enough gets paged out to your hard drive - every try and calculate hashes using a hard drive for storage?? BAD!) - I had this exact some issue when I was trying to get my miner up and running and that was what I discovered. The easiest way I figured out how to know where to set TC or buffer size was using GPU-z (people on Windows 8 should use HWInfo). On the sensors tab, there are two graphs - Dedicated memory and dynamic memory. Have that open when you launch your miner - if dynamic memory goes up at all, kill the mining software ASAP. Then lower your TC until only dedicated memory increases when you launch the miner. MY 4GB cards would do this with any value for TC over 24576 with a lookup gap of 2 (using -g 2) - buffer-size 1,536 MB.
OK - So I took on board everything you said and there is no way I can get my 290 working with lookup-gap of 2 and g=2..
Setting my TC to 20000 and lookupgap 2, g=2 results in nothing but hw errors. Increasing the TC gradually, I get to a point where it just kills the entire system - at no point is there a balance where I can mine without HW errors unless I set my I stupidly low (eg.. 12) which results in a piss poor hash rate (< 80KH/s).
Either I am missing something or it isn't possible on the 290 with only 4GB RAM.
Back to TC of 42600 (I increased it a little

) and lookup gap 3 for now.