Since you are slightly concerned about speed, here is the Mark Wilbrow's solution ported to Metapost + LuaTeX (I use ConTeXt, but you could use something similar with LuaLaTeX + mplib as well).
\setupMPpage[instance=doublefun]
\starttext
\dorecurse{3}{
\startMPpage
ux := 0.5pt;
uy := 2pt;
vardef jump = 2*(uniformdeviate 1) - 1 enddef;
path p;
z[0] = origin;
p := z[0] for i = 1 upto 1000 :
hide(z[i] = z[i-1] + (ux, jump*uy);) -- z[i]
endfor;
draw p ;
\stopMPpage}
\stoptext
The instance=doublefun
line tells metapost to use double precision (instead of the usual scaled precision. I draw the line three times to get a fair speed comparison with TikZ.

On my 2013 Macbook, I get the following times:
For the Mark Wibrow's Tikz solution:
$time pdflatex --interaction=batchmode rand-ltx.tex
2.45s user 0.02s system 99% cpu 2.491 total
For the above luatex + metapost (ConTeXT) solution:
$time contextjit rand-c --once --noconsole
0.77s user 0.08s system 97% cpu 0.867 total
So metapost is about 3 times faster (Perhaps more, because the load time of luatex + opentype fonts is much larger than the load time of pdftex).
You can also play around with different type of line connections to see which result looks better (I am trying with --
, .. tension 2 ..
and `.. tension 3 ``.
\setupMPpage[instance=doublefun]
\starttext
\setvalue{line:1}{--}
\setvalue{line:2}{.. tension 2 ..}
\setvalue{line:3}{.. tension 3 ..}
\startTEXpage
\dorecurse{3}
{\startMPcode
randomseed := 42;
ux := 1pt;
uy := 4pt;
vardef jump = 2*(uniformdeviate 1) - 1 enddef;
path p;
z[0] = origin;
p := z[0] for i = 1 upto 100 :
hide(z[i] = z[i-1] + (ux, jump*uy);) \getvalue{line:\recurselevel} z[i]
endfor;
draw p ;
\stopMPcode
\endgraf}
\stopTEXpage
\stoptext
which gives

There is a subtle difference between the second and the third curve.
\pgfmathsetseed
that fixes the random output that you will see. Remove that line and you'll get a different output each time.