The alternative is signing a bunch of future transactions using future, unconfirmed inputs and starting from a single, large enough confirmed input, which has its own set of problems e.g. what happens if they are broadcasted all at once, by accident?
How about this: locktime. You sign transaction A to be valid in September 19th, transaction B to be valid in October 19th etc. Transaction B uses outputs from transaction A, so A must be already confirmed. All transactions can't be broadcasted at once, unless we've reached the last transaction (Z) and none is broadcasted yet (which couldn't happen either, as the person would report to the merchant that they didn't receive money in September 19th).