Also, what other kind of usage patterns are going on. I wrote a
simple test case for this and on a table with 100,000 entries already
in it, then inserting 10,000 in a transaction and 10,000 outside of a
transaction, I get insert rates of 0.1 ms and 0.5 ms respectively.
With a table with 1,000,000 rows already in place, the insert times
with all the fields in an index was 1.5ms and 4.3ms respectively.
With only i1, i3, i4, val1 in the index, the numbers for a table with
100,000 entries to start with was 0.1ms and 0.5 ms, just like the
above with the larger index. With a 1,000,000 initial table, inserts
take 2.1 and 3.0 ms respectively.
So I don't think you've found the cause of your problem with the smaller index.