Is it good practice to create tables dynamically?
There isn't any definitive answer for this problem. 

You've correctly identified some of the possible tradeoffs (single table=simpler/possibly slower/more contention?, multiple tables=more complicated/faster, maybe?/harder to use in other contexts?).

The general advice is to start with the more straight-forward single-table solution, then break them out if testing shows problems.

Most of the time you're going to get good performance on a single table as long as you have decent hardware and proper indexing design. 

Depending on the specific platform, you might have other technical solutions like filtered indexed views and stuff like that.