Wow... I cant even begin to think about how many WTF's are in that requirement. Physical tables to represent logical divisions is just wrong. My DBA brain just exploded.
The only way I can see making that work with SubSonic is to run everything through as an inline query. Of course, that means you lose all the SubSonic goodness.
Of course, you could take the route of generating a new DAL every period and hit it via reflection and put all the nasty logic required to determine the classes based on company and period in your code.
Or, you could generate stored procs that take the table as a parameter and use dynamic SQL to query and insert/update the data.
Or, you could change the SubSonic templates that do the generation to take in a table name on the fly and sling that around.
Not one of those options is very pretty. WIthout doing the research required, the last option might be feasible. It certainly would not be an option for LLBL or nHibernate, thats for sure.
Software Is Like Cathedrals: First we build 'em, then we pray.