I would consider using a different method to update the underlying tables. Instead of updating these tables for 1-2 minutes, make "shadow" tables in another schema. (And have a third schema for temporary holding.) This allows you to work on tables the users can't see, then switch them in using simply a metadata operation. Then you can do this:
- truncate/re-populate the shadow tables (2 minutes, or maybe less with no contention)
- start a transaction (sub-millisecond)
- move the primary table to the holding schema, using ALTER SCHEMA ... TRANSFER (sub-millisecond)
- move the shadow table to the dbo schema (sub-millisecond)
- move the primary table to the shadow schema (sub-millisecond)
- commit the transaction (sub-millisecond)
- (optional) truncate the shadow table to recover some space (sub-second)
One downside of this solution is that you will have two sets of stats, indexes etc. to maintain. For the stats you should be ok if the data is simply increasing and not changing substantially otherwise.
Adam Haines has a really thorough write-up about this method (which I showed him a few years ago) here:
http://jahaines.blogspot.com/2009/10/locking-table-while-it-is-being-loaded.html