two options that immediately come to mind
-
version control the address. each time the address is edited, create a new address record. Allow a customer to have many addresses but only the latest is 'current'. When creating an order the current address at the time is linked to the order
-
give the order its own address which is initially populated by the customer address
Option.2 is probably safer, but you do need to give users the option to correct the address associated with the order in case they notice it is wrong. it would be embarrassing to still ship goods to the incorrect address after they think they have corrected it
Perhaps warn the user. "do you wish to apply this change to outstanding orders?"