In texture paint mode, is there a way for brush to be normal to surface instead of parallel with viewport?
Not yet, but the ability to do so is coming since Pablo Dobarro has coded it in development and it should be coming in official 2.82 later on. He made it consistent with the way the new 2.81 sculpt brush drawing works with the brush following the normal.