Precision Current Measurement Using Arduino
The sense resistor value selected is 500 mOhm. According to my
  understanding to get 5 uA resolution ADC’s 1 LSB must be less than or
  equal to 2.5 uV (RsenseCurrent step, ie (500mohm5uA). Please correct
  me if I am wrong.


You're correct, but not in any useful way. Yes, your resolution is 2.5 uV for .005 mA, but your full scale (5 volts across .5 ohms) is 10 amps, or 100 times greater than you need.


  Do I need to use a pre-amplifier after current sense resistor? Imagine
  I am using an ADC with 24bit resolution and 5V reference then my 1LSB
  will be 0.3uV, less than the required resolution.


For any reasonable ADC, yes. At 100 mA, a .5 ohm resistor will give you .05 volts out. For a full-scale reference of 5 volts, you'll need a gain of 100 buffer amp. Of course, this amplifier must have less than 5 uV of temperature and aging drift over whatever temperature range you might operate (referenced to the input). Note that that is not 5 uV/ degree of temperature drift, but 5 uV total over the entire range.

However, why should we imagine you're using a 24-bit ADC? Do you have one available?


  Is it possible to connect a buffer after Rsense and connect its output
  directly to ADC input?


Yes. A gain of 100 will do nicely for a 5 volt full scale input.


  May I know can I use Arduino for this application


Never in a million years. Your required resolution is .1/.000005, or 20,000 counts. A 14 bit converter will provide a resolution of 16,384, so if you relaxed your resolution requirement a bit to 6.1 uA, you could (theoretically) go that route.

Of course, Arduino's don't come with 14 bit ADCs. 10 bits is all you get. For a 100 mA full scale, your resolution will be nominally (and we haven't addressed accuracy here, only resolution) 100 mA/1024, or 97.6 uA, nearly 20 times worse than you have specified.