I want to import a package in a way that requires me to use the long names for package symbols, just as if I had created the context on the fly. What is the idiomatic way to do this?
I don't know if you really want what you said you want. That is because if you load a package, all symbols are already created, just by parsing.
What you can do is to not introduce new contexts on
$ContextPath which will force you to use long names.
It is mentioned in Leonid's answer in What are the use cases for different scoping constructs? but it is probably to broad to mark as a duplicate.
About parsing and symbol lookup you can read in
Your question can be interpreted also in that way:
BeginPackage["Test`"]; random; Begin["`Private`"]; random := random = (Pause; 4); End; EndPackage
random symbol is also created instantaneously but it will be defined after you call the first time.