If the logging you provided is correct, always scanning for the PMT id (and not storing this in the database) only takes a few milliseconds. It seems to me that would be a much more straight forward way of handling this.
If I remember correctly the DVB specs are saying that PMT should be injected to the stream in 0.2 second basis. Of course some broadcasters aren't playing nicely with this and even 1 per 1 second times can be happening. This is too much (actually even 200ms delay on a fast zapping is too much, as it is approx 25% increase on good zapping times).