"Many ignition events per second" is not necessarily all that fast. An Arduino can do many, many things per second. :-)
If there aren't a lot of other things that the CPU needs to be doing at the same time, you could probably get away with a loop using DigitalRead() to watch the line. ("Polling loop," as people say.) Even for an 8-cylinder engine at 12,000 rpm, you have 20 us between pulses (assuming 4-cycle engine) which is enough time for a couple hundred AVR instructions.
Megasquirt has the coil input triggering an interrupt, since it needs to do a lot of other things at the same time--computing fuel delivery rates and turning injectors on and off, for example.
I think either way would probably work, and neither would be very hard to do. If all you do between coil pulses is process the results of the last pulse, as in a tachometer, then I see less advantage to using an interrupt.
I don't know much about PulseIn(). That might work too.