I don't think that "missing pole" type things are commonly done to designate an index. It seems difficult to do... usually there's something separate for the index.
I suppose THD isn't too much of a problem for digital switches, but in theory there can be ringing (and polarity change) for very close airgaps; probably not likely to occur, especially as whatever sensor you use will need some enclosure, which will increase the effective airgap.
What will the material of the enclosure be? Aluminium? Machined nylon? 3D printed nylon?
To clarify: all of these gear-tooth sensors with a permanent magnet are variable reluctance sensors. The change in reluctance due to a gear tooth causes the magnetic flux density in the gap (between gear and magnet) to change. You can measure the change in flux density with either a coil or a Hall, but the sensor works based on the same principle. Only the measurement method is different.
For an all-included Hall solution, I would look at Allegro. They have gear-tooth type sensors which include all the AGC auto-calibration bells and whistles, and even includes the permanent magnet that goes with it! So connect to your timer and off you go.
But... I see you have a TI chip with the QEP module. If you can get a high resolution position sensor with ABZ output, then this is even easier. Just wire up your incremental + index sensor to the QEP, and the QEP will keep track of the current position. The current shaft angle will be waiting for you in a register, ready whenever your code needs to read the angle. Also, you can set up interrupts when the current position (as counted by the QEP) matches some other value you set in another register.
With this type of setup, you can forgo the countdown timer/extrapolation rubbish to estimate position in between teeth.
For a camshaft, I assume you have access to the end of its shaft. If you can install a diametrically magnetized cylindrical magnet on the end of the camshaft, you can use an end-of-shaft rotary position sensor to read it (presumably with machining of the timing cover), such as AMS AS5040 (or similar). It goes to very high RPM, and it has ABZ output; perfect for the QEP module.
See this appnote for magnet selection for end-of-shaft applications:
http://www.melexis.com/asset/magnet-application-note-mlx90316-downloadlink-5221.aspxYou may need a line driver on the rotary position sensor PCB for the ABZ signal to reach the ECU cleanly.
There may be +/-1 degrees of non-linearity or so, but this is on par with the spark scatter you see on a traditional distributor setup. Anyway, when you tune the spark advance, you tune for the spark that gives good power, whatever this advance is. So you don't need absolute accuracy; all you need is for your sensor to be repeatable (even if it is non-linear).
I'm sure you know that measuring crankshaft position is preferred, but where do you stop, right? Just one camshaft position sensor will not be the best, but it should be "good enough".
I would add intake air temperature (ideal gas law changes in air density) and oxygen sensor (it's good to have instrumentation, you don't want to be tuning blind) as useful inputs. I do not see the need for wheel speed for a beginner-level ECU; the engine stops at the flywheel; the ECU doesn't need to know what is happening outside of its world.