From your given information about the first question, I gather that you are Publishing to multiple Publication Targets, probably through a single Target Type, or you have a single Publication Target with multiple Destinations.
This kind of setup works well when you require the content to arrive on all Destinations around the same time but more importantly in the same Transaction. Given your information this it not exactly what you are looking for, you seem to want the Deployment to be scheduled after each other.
As a solution I would suggest to separate the Destinations in their own Publication Target and give each its own Target Type. Next give the Content Editors only the right to Publish to one of those Target Types and not too the others (and instruct your Administrators, not to use those either). Then you can write a couple of Event Handlers that will subscribe to the SetPublishStateEventArgs
of the items and then trigger Publishing to the next Target etc. This way your Publish Transactions will be (sort of) scheduled after each other automatically.
Now as for your second question: basically we are talking about the same thing. Subscribe to the SetPublishStateEventArgs
of that item (Component) and when PublishTransaction.State == PublishTransactionState.Success
add a new PublishTransaction for the same item to another Target.
The only downside of all this is that since you separate each Destination of the Publication Targets and assign them to separate Target Types, you will have some overhead of Rendering (the item is rendered for each Transaction separately). If that becomes a performance issue, then you should consider a Storage Extension as Quirijn mentions in his answer.