One problem is, that the posted graph is about light attenuation, aka how much % from your incoming light of each frequency you will still be able to see a a certain depth (there is a light attenuation coefficient and some higher math at google ^.^), while the mentioned scattering/caustics is caused by refraction and depends on the index of refraction for each wavelenght.

Biggest problem i see so far: Those calculations could be implemented, and calculated for certain wavelenghts, f.e. for those 7 colors/wavelenghtsfrom the graph. However, UE and almost every engine don´t use wavelenghts, we use RGB colors or variants of it. So while every light from the graph would be an independent wavelenght, like red 650nm, green 550 nm, blue 450nm, or violet ~425nm 8range is given from 380 to 450nm), in RGB most colors are just a mix of the RGB colors. F.E. yellow is red 255, green 255, blue 0. while it has it´s very own wavelenght, which is independent from red and greens wavelengths.

So in theory, you would need to convert and split your light calculation into those wavelenghts (minimum 3 for RGB), then do your absorption and refraction stuff, then convert the results back into RGB colors, that the comp can display.

Well, maybe it isn´t that complicated, if you set up some filters in post process, which filter out red, green and blue according to your graph for certain depths, with red being reduced to zero at a few meters, while blue and violet travel really deep.

Since your flashlight would start from where the player is, and not from the surface, it would probably be easier to split it into 3 lights, one for each main color, and set it up, that red have the shortest range, and blue the longest.