Glad to know that it might be possible to use those work arounds.
I know that this would require a lot of work so I'm not suggesting you should do this just because of this issue but in the future you might want to consider setting the keyspace on the mapping configuration if you are using Linq2Cql or the Mapper to generate the statements or specifying the keyspace in the actual statement string if you are using prepared statements directly. This way you can avoid creating multiple sessions (with all the extra resources associated with new session instances like connections).
If your schema and queries are different between keyspaces,
then it's just a matter of specifying the appropriate keyspace on
each statement or table mapping configuration.
// prefer
var ps = session.Prepare("SELECT * FROM ks1.table1 WHERE id1 = ?, id2 = ?");
// instead of
var ps = session.Prepare("SELECT * FROM table1 WHERE id1 = ?, id2 = ?");
If you have similar schema and similar queries for different keyspaces then it's a bit more difficult but you can still do it. With Linq2Cql, you can specify the keyspace when creating the Table instance. With the Mapper, you can not specify the keyspace when creating the instance but you can create multiple MappingConfiguration instances with the same mappings and different keyspaces. Then you can create one mapper instance for each MappingConfiguration (and every mapper would reuse the same session). With prepared statements you could do string concatenation/interpolation and prepare every statement for each keyspace.
Again, I'm not suggesting you rewrite all of this code just to deal with this issue but it's something to keep in mind for the future.
Thanks,
João Reis