Here is an option that sets every \question inside a tabularx, making it unbreakable across the page boundary within a question. The optional argument allows you to specify the number, otherwise it naturally increments with every use of \question:

\documentclass{article}
\usepackage{tabularx,xparse}
\newcounter{question}
\newlength{\questionlen}
\setlength{\questionlen}{7em}
\NewDocumentCommand{\question}{o m}{%
\noindent
\begin{tabularx}{\linewidth}{ @{}p{\questionlen} X@{}}
\bfseries
\IfNoValueTF{#1}{% \question{..}
\stepcounter{question}%
\thequestion. \hrulefill
}{% \question[.]{..}
#1 \hrulefill
}%
& #2
\end{tabularx}%
}
\begin{document}
\question{bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla.}
\question{bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla.}
\question[4.]{bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla.}
\setlength{\questionlen}{10em}
\question{bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla.}
\end{document}
Adjustment of the question width is done using \setlength{\questionlen}{<width>}.