Cross join yields execution plan that reads one of the tables multiple times
My question is whether the index scan on the smaller table is performing multiple I/O operations, one for each row on the bigger table, as opposed to doing it only once and having its result being fed to the following step only once.


Yes, for every row that comes out of A, you need to produce all of the rows for B. Since there are five rows in A, you make five trips to B. 

Cross Joins can only be implemented with Nested Loops, and that's normal behavior for it.