Some comments about the patch:
1) From a DB perspective, I think we are on time. Right now both 1.9 and 2.0 are on sync, so we CAN update.
2) While looking to the patch, I think that it's overall ok (I'm not a roles expert) although I think all this should be fulfilled with it:
---- 2A) All the functions in accessib accessing to role_assignments should add that active = 1 condition (excerpt the ones wanting to return "disabled-by-time" roles, of course). Not sure if current patch modifies all the needed places. I leave this for experts.
---- 2B) When inserting/updating role_assignments from UI.... I think we should check both startime and endtime to calculate the "active" correct value. Currently only starttime is checked (I know it hasn't too much sense to insert two dates in the past, but...).
----2C) One minor detail, when looking for non-active role_assignments, the "AND ra.timestart<>0" condition seems to be useless. Not critical, but a detail, if I'm not wrong.
3) If I've understand the thing properly the idea is that, in cron.php, any inactive role having its starttime in the past will be activated. And we are skipping timeend on purpose because the same cron.php script is responsible for deleting "expired" assignments, correct? Then, I've saw that right now, that part of the cron.php script ("Removing expired enrolments") has one curious inter-relation with course->enrolperiod, deleting only assignments belonging to courses with enrolperiod. And that has sounded me really UN-BALANCED, please check an verify if that approach is correct (i.e. if there is any relation between those concepts). I feel thay shouldn't be related at all, but I'm not 100% sure.
And that's all I can say. I think it's an interesting feature to have working properly and pre-calculating active assignments sounds reasonable (you know we are assuming some delay until cron execution, of course) to avoid those inequalities in queries.
Hope this helps. Ciao 
I'm not sure if this is still relevant in 1.9, pushing to 2.0