I think the best way to do this is to create a Price entity that is associated with the product.
Next to a price attribute within this entity you can also set a price from and enddate to make sure you can see which price belongs to the product at which point in time.
As an alternative to Maarten’s solution, you can store historic data in a separate domain model – analogous to offloading such data to a data warehouse for BI purposes.
You can duplicate your domain model, and when a customer places and order, you can use the Clone function from the CommunityCommons module to duplicate your operational data to your historic domain model.