Datablocks are a poor choice due to variables like player models, altered stats, and custom scripts. Also, the change datablock->change back stuff needs to be handled carefully so it doesn't break with other mods that do the same thing. For example, if a player picked up an item and became overburdened while zoomed in with a scope, they could unscope and walk away freely.
Physical zones can stop a player completely, and can be ideal in many circumstances, but in this case you wouldn't want the player to freeze in midair, and as Pecon said, they don't work properly in water.
The orbit-cam method of freezing a player generally works well, as long as you block off any servercmds you don't want them using while out of their body. Unfortunately you'd be out of luck if you still wanted them to be able to shoot. Also, admins can forget it up easily, accidentally or intentionally.
In this case, however, I think Headcrab Zombie had the best suggestion, however instead of mounting them to a shape, you could put them in the driver's seat of an invisible player that can barely move, so you still get your slow movement (albeit with no automatic animation, and the aiming may be a bit weird depending on how you set the control) without messing with the player's datablock directly. Having 2 or 3 datablocks for extra slowdown would let you control speed further by weight. You'd have to do a bit of scripting so the game doesn't treat it like a normal vehicle, but the overall result seems well suited to this purpose.