I'd actually considered that. It poses a few trade-offs:
- each item doesn't really have anything that uniquely identifies it, so as you said we'd be talking about a surogate key.
- high quantities = lots of rows. Not a major problem at the moment since we're generally dealing with low quantities.
- most of the time the data will be accessed as order lines, not items. I could solve this easily enough by having a view, though.
I'm not entirely sure which I'll go with, they both have drawbacks and advantages.

I think having "order item" is more elegant and gives me the RI I want, but "order line" is a bit more intuitive since that's how things appear on invoices and such.
Thanks for the input.