Repeated calls to df.iloc[n] go through fast_xs which will call interleaved_dtype each time with the same arguments. We could cache the result of that and save some time. Would need to be careful about cache invalidation.

xref #61747