Should there be a temporary table to hold Order and OrderItems?
I personally don't see an advantage to separating them, especially given that you will probably have a primary key on the Orders table that the OrderItems table will need to reference.  I normally handle this by having a nullable column for "closed" and/or "voided" that is stamped with now() on the appropriate event but left NULL until then.  If you're concerned about having too many open orders, you could have a garbage collection script that runs during off-peak hours to remove them.