There's isn't really a single answer. It all depends on what exactly it is that you're trying to model. In your example, Consumable might be a redundant class if only HealthPotion derives from it -- now and forever -- or it might not be if you're accounting for future additions.
If space efficiency is a requirement, you should take it easy on polymorphic classes (that is, classes with virtual function members), though.
Also, by the KISS principle, something simple is better than something complex if they both accomplish the same thing. Thus, needlessly deep inheritance trees are best avoided.
As a general rule, compilation time grows linearly with the number of files with a constant factor of 1 with the number of .cpp files. Additionally, every header is compiled once for every .cpp that includes it. The worst case is when you have many .cpps that all include many headers.
If your patience is in as short supply as mine, you'll want to cluster related classes in files and make use of precompiled headers, if your compiler supports them.