How to avoid grainy renderings in Cycles?
Sample number is set to 128


Unless you have the "square samples" option enabled (which turns it into 128^2 samples, aka 16384 samples), 128 is not high at all. Set it higher.


  Light paths are set to "full global illumination," where maximum numbers of bounces are all 128 (but this also means caustics are on. Maybe I should try turning them off. Thought they contribute to photorealism, the graininess I current have is unbearable...)


I'd advise never using the Full GI setting unless you specifically want to wait around for awhile to get every last lighting detail. The benefit of extra diffuse bounces drops of FAST after 2-4. Glossy and transmission often need more to avoid dark reflections/refractions, but 128 is overkill. Try 4-6 for glossy and 10-16 for transmission.


  Filter glossy is set to 0.5


Try 5.0. 0.5 is barely enough to even do anything.


  world.cycles.sample_as_light set to True, as I read from a article by Andrew Price


Do you know what that setting actually does? If not, give this a read: What is multiple importance sample option While that option is usually the right call for scenes with HDRIs, you should understand WHY you are enabling options, not just flipping them on because the tutorial said to.



Generally, here's my steps for cutting down render time and noise, in order of increasing desperation:


Turn on filter glossy
Disable refractive caustics
Turn off diffuse visiblity on mesh lights, add a lamp object to cover the missing lamp.
Lower diffuse bounces
Disable reflective caustics (they're generally softer than refraction caustics, so less noise and more contribution)
Turn on clamp indirect. Remember that it clamps sample values and not final pixel colors. Mind what white point you're using if you have enabled exposure options, post-processing, the filmic-blender LUT kit, etc.
Turn on clamp direct (absolute last resort, avoid this setting if you can).