Instead of hard-coding the values of the footnote construction, assign them to lengths. This way you can change the lengths and the associated footnote mark definition would change along with it. It's similar to redefining the footnote mark definition, but doesn't require the overhead.
Below I define two lengths - \fnmarkA
and \fnmarkB
. I also redefine the way \footnote
works in order to condition on the footnote number. All footnotes are set in the usual way until you reach footnote number 99. At that point, the \fnmarkA
and \fnmarkB
lengths are updated, and the original \footnote
definition is restored (to avoid more overhead due to unnecessary conditioning).

\documentclass{scrreprt}
\usepackage{lipsum,xparse}
\newlength{\fnmarkA}\newlength{\fnmarkB}
\setlength{\fnmarkA}{2em}
\setlength{\fnmarkB}{1.5em}
\let\oldfootnote\footnote% Store \footnote definition
\deffootnote{\fnmarkA}{\fnmarkB}{\makebox[\fnmarkA][l]{\thefootnotemark.\ }}% < 100
\RenewDocumentCommand{\footnote}{ o m }{%
\IfValueTF{#1}
{\oldfootnote[#1]{#2}}% \footnote[.]{..}
{\oldfootnote{#2}}% \footnote{..}
\ifnum\value{footnote}=99
\addtolength{\fnmarkA}{.5em}% Associated with \footnote 100+
\addtolength{\fnmarkB}{.5em}% Associated with \footnote 100+
\let\footnote\oldfootnote% Restore original footnote definition (avoid overhead)
\fi
}
\def\x{\lipsum[2]\footnote{Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Proin sagittis mattis vulputate. Aliquam dignissim, nulla scelerisque hendrerit dictum,
enim ante molestie nulla, in fringilla massa nisi sit amet nulla.}}
\def\y{\x\x\x\x\x\x\x\x}
\begin{document}
\y\y\y\y\y\y\y\y\y\y\y\y\y\y\y\y
\end{document}
xparse
was merely used for its easy way of managing optional arguments (which \footnote
provides) and/or conditioning on their existence/use.