1. As I said before, SQLite has to create an implicit transaction, perform your update, wait for the harddrive platters to fully commit the data via flushing the disk buffers, and tear down the transaction every 30ms. This is a lot of work. As a matter of fact, in 30ms using a single transaction, SQLite could probably write 10,000 updates to the same database. Building the transaction and flushing the disk buffers consumes the vast majority of the effort.
2. How about revisiting this 30ms update thing? Do you really have to update that much? Can't you spin off a separate thread and build the updates up into a cache and when the cache exceeds a certain threshold, flush the cache to the database via separate thread? Doing this in a single transaction would massively increase performance.
3. Use parameterized queries. This won't solve the problem alone, but it will help.