Squashing makes sense if you have a really ratty bunch of checkins with work-in-progress checkins etc., but unless its a trivial topic branch I would still typically make the final set of commits into a few logical steps.
It costs pretty much nothing to leave old topic branches around (but a few thousand "nothings" can add up :-)).
Once you have merged a topic branch you can safely delete the branch with no harm (apart from losing the branch itself).
As Ahmed says it depends on your workflow.
For example lets say you are using some fault tracking database (eg. trac). It often makes sense to do the fix on a topic branch (eg. fix-trac-1234). If you leave the branch in place after merging it you can then refer to the branch in the trac notes and see what fixes were used to fix the bug (and reopen the bug if it needs another kick).