I would put the db (and mapnik) on one server and the cache on another.
The work of the database and mapnik is a tough job but you can do it anytime.
You can have the database and mapnik on a quite weak server. After you have seeded your tiles you just have to reseed when you have done someediting or there have been changes. I haven't played with TileCache, but in MapProxy you can seed just the tiles that is touching polygons that you define (which can be defined from the geometries you have edited).
Then, you put the power on the cache server. I would put the ssd-disks there. If you seed the tiles, the storage of the tiles will be an obvious bottleneck.
Then to tune the system you can play with different file systems.
If you put the two servers on virtual machines you can give the db/mapnik server enough resources during initial seeding and then put the power on the tile-server.
By putting them on different servers you will get a cleaner setup that should be easier to tune, and will give you the resources of the db to serve wfs for instance.