I personally think that this would be very hard to pull off. (If your web site goes viral and suddenly has 2.5 million users, it’s gonna be really hard to pull off.) Your proposed solution is not only serious over-kill, in my humble, but it does not scale up. At all.
Pragmatically speaking, you need to include a user_id column in every table, then index that column, and then design the data-model layer (perhaps using some kind of base class?) to be certain that user_id is always part of the requisite criteria that is always used for those tables and/or views. A base-class could “elegantly” ensure that user_id is always part of any where clause, and always inserted as a non-NULL value in inserts.