I was facing a similar problem, except that I wanted to have SI prefixes. I adapted your code to that. Might not be the cleanest solution, but works so far. I also added a rounding capability so that the corrupted values can be fixed (by losing decimal precision of course)

\documentclass{article}
\usepackage{tikz,amsmath, amssymb,bm,color,pgfkeys,siunitx,ifthen}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\usepackage[pdftex,active,tightpage]{preview}
\begin{document}
% use \newcommand (not \def), so the one (and only)
% argument can be specified in {} (and not in []) brackets
\newcommand{\engticksilabel}[1]{
\pgfmathparse{0}% precision
\edef\numtoengprecision{\pgfmathresult}%
\pgfkeys{/pgf/fpu}% else dimension too large!
\pgfmathparse{(#1)}% % eng labels come out as logarithms
\edef\numtoengraw{\pgfmathresult}%
\pgfmathparse{round((\numtoengraw)*10^6)/(10^6)}%
\pgfmathfloattosci\pgfmathresult
\edef\numtoengroundedraw{\pgfmathresult}%
\pgfmathparse{floor(log10(\numtoengraw)/(log10(1000.0)))}%
\edef\numtoengexpthree{\pgfmathresult}%
\pgfmathparse{(\numtoengraw)*(1000^((-1.0)*\numtoengexpthree))}%
\edef\numtoenginputnormalized{\pgfmathresult}%
\pgfmathparse{3*\numtoengexpthree}%
\pgfmathfloattofixed\pgfmathresult%
\edef\numtoengexpten{\pgfmathresult}%
\pgfmathparse{round(\numtoenginputnormalized*10^\numtoengprecision)*(10^(-1*\numtoengprecision))}%
\pgfmathfloattofixed\pgfmathresult%
\edef\numtoenginputnormalizedrounded{\pgfmathresult}%
\pgfmathparse{ifthenelse(or(\numtoengexpthree<-(18/3),\numtoengexpthree>(18/3)),1,0)}% too small
\pgfmathfloattoint{\pgfmathresult}%
\message{raw=\numtoengraw,exp3=\numtoengexpthree,normalized=\numtoenginputnormalized,normalizedrounded=\numtoenginputnormalizedrounded}%
\ifthenelse{\equal{\pgfmathresult}{1}}%
{%
\edef\engtonumnumber{\num[%
scientific-notation=engineering,%
exponent-to-prefix=true,
round-mode=places,%
round-precision=3,%
zero-decimal-to-integer,%
group-digits=false,%
exponent-product=\!\cdot\!,%
]{\numtoenginputnormalizedrounded}}
\edef\engtonumexptennumber{\num[%
scientific-notation=engineering,%
exponent-to-prefix=true,
round-mode=places,%
round-precision=3,%
zero-decimal-to-integer,%
group-digits=false,%
exponent-product=\!\cdot\!,%
]{\numtoengexpten}}%
\def\numtoengsiprefix{{\cdot} 10^{\engtonumexptennumber}}%
}{% else: normal number format
\edef\engtonumnumber{\num[%
scientific-notation=engineering,%
exponent-to-prefix=true,
round-mode=places,%
round-precision=3,%
zero-decimal-to-integer,%
group-digits=false,%
exponent-product=\!\cdot\!,%
]{\numtoenginputnormalizedrounded}}%
}%
\pgfmathparse{ifthenelse(\numtoengexpthree==-(18/3),1,0)}%
\pgfmathfloattoint{\pgfmathresult}%
\ifthenelse{\equal{\pgfmathresult}{1}}%
{\edef\numtoengsiprefix{\si{\atto}}}{}%
\pgfmathparse{ifthenelse(\numtoengexpthree==-(15/3),1,0)}%
\pgfmathfloattoint{\pgfmathresult}%
\ifthenelse{\equal{\pgfmathresult}{1}}%
{\edef\numtoengsiprefix{\si{\femto}}}{}%
\pgfmathparse{ifthenelse(\numtoengexpthree==-(12/3),1,0)}%
\pgfmathfloattoint{\pgfmathresult}%
\ifthenelse{\equal{\pgfmathresult}{1}}%
{\edef\numtoengsiprefix{\si{\pico}}}{}%
\pgfmathparse{ifthenelse(\numtoengexpthree==-(9/3),1,0)}%
\pgfmathfloattoint{\pgfmathresult}%
\ifthenelse{\equal{\pgfmathresult}{1}}%
{\edef\numtoengsiprefix{\si{\nano}}}{}%
\pgfmathparse{ifthenelse(\numtoengexpthree==-(6/3),1,0)}%
\pgfmathfloattoint{\pgfmathresult}%
\ifthenelse{\equal{\pgfmathresult}{1}}%
{\edef\numtoengsiprefix{\si{\micro}}}{}%
\pgfmathparse{ifthenelse(\numtoengexpthree==-(3/3),1,0)}%
\pgfmathfloattoint{\pgfmathresult}%
\ifthenelse{\equal{\pgfmathresult}{1}}%
{\edef\numtoengsiprefix{\si{\milli}}}{}%
\pgfmathparse{ifthenelse(\numtoengexpthree==(0/3),1,0)}%
\pgfmathfloattoint{\pgfmathresult}%
\ifthenelse{\equal{\pgfmathresult}{1}}%
{\edef\numtoengsiprefix{}}{}%
\pgfmathparse{ifthenelse(\numtoengexpthree==(3/3),1,0)}%
\pgfmathfloattoint{\pgfmathresult}%
\ifthenelse{\equal{\pgfmathresult}{1}}%
{\edef\numtoengsiprefix{\si{\kilo}}}{}%
\pgfmathparse{ifthenelse(\numtoengexpthree==(6/3),1,0)}%
\pgfmathfloattoint{\pgfmathresult}%
\ifthenelse{\equal{\pgfmathresult}{1}}%
{\edef\numtoengsiprefix{\si{\mega}}}{}%
\pgfmathparse{ifthenelse(\numtoengexpthree==(9/3),1,0)}%
\pgfmathfloattoint{\pgfmathresult}%
\ifthenelse{\equal{\pgfmathresult}{1}}%
{\edef\numtoengsiprefix{\si{\giga}}}{}%
\pgfmathparse{ifthenelse(\numtoengexpthree==(12/3),1,0)}%
\pgfmathfloattoint{\pgfmathresult}%
\ifthenelse{\equal{\pgfmathresult}{1}}%
{\edef\numtoengsiprefix{\si{\tera}}}{}%
\pgfmathparse{ifthenelse(\numtoengexpthree==(15/3),1,0)}%
\pgfmathfloattoint{\pgfmathresult}%
\ifthenelse{\equal{\pgfmathresult}{1}}%
{\edef\numtoengsiprefix{\si{\peta}}}{}%
\pgfmathparse{ifthenelse(\numtoengexpthree==(18/3),1,0)}%
\pgfmathfloattoint{\pgfmathresult}%
\ifthenelse{\equal{\pgfmathresult}{1}}%
{\edef\numtoengsiprefix{\si{\exa}}}{}%
{$\engtonumnumber\numtoengsiprefix$}%\numtoengsiprefix$}
}
\begin{preview}
\begin{tikzpicture}
\begin{axis}[
axis x line=bottom,
axis y line=left,
scaled ticks=false,
xmode=log,
/pgfplots/xtick={0,0.5,1,5,10,50,100,500,1000,5000,10000,50000,100000},
x tick label style={rotate=-50, anchor=west, align=center, font=\small},
xmin=0, xmax=200000,
ymin=0,
visualization depends on={rawx \as \myx}, % , \tick \as \myxt
nodes near coords={($\pgfmathprintnumber\myx$, \textcolor{black}{\engticksilabel{\myx}}\color{blue})},
% cannot use options to \num here, we're already in options,
% so extra [], like below, will cause "! Missing \endcsname inserted."
% xticklabel=\num[scientific-notation=engineering,round-mode=places,round-precision=2,zero-decimal-to-integer]{123},
% so, use a \newcommand ( \mynum ) here:
xticklabel=\engticksilabel{exp(\tick)}, % \myx undefined here, \tick is logarithm'd!
]
\addplot[color=blue,mark=*] coordinates
{ (0.5,1) (1,2) (5,3) (10,4) (50,5) (100,6) (500,7)
(1000,8) (5000,9) (10000,10) (50000,11) (100000,12)};
\end{axis}
\end{tikzpicture}
\end{preview}
\end{document}