I had a MacBook Pro 2017, using a USB-C to HDMI which can support 4K@60Hz.
I ran CoreDisplay patcher to enable 60Hz for 4K resolution:
But Refresh Rate is still locked at 30Hz for other resolutions. Is there a way to unlock 60Hz for 2560x1440?
HDMI 2.0 4K60Hz might use chroma subsampling (YCbCr422 10bpc) https://www.rtings.com/tv/learn/chroma-subsampling
You can force RGB by overriding the EDID (limits you to 8bpc) https://www.mathewinkson.com/2013/03/force-rgb-mode-in-mac-os-x-to-fix-the-picture-quality-of-an-external-monitor
DisplayPort 1.2 is preferred because it has slightly more bandwidth and will allow RGB 10bpc without requiring workarounds.
2560x1440@60Hz HiDPI uses a scaled resolution of 5120x2880. This means macOS draws into a frame buffer that is 5120x2880 and the graphics card scales the frame buffer to the scaled resolutions base which is 3840x2160 in your case (SwitchResX can change the scaled resolutions base). By default, scaled resolutions are created with only one refresh rate/timing. I think the timing used for the base resolution is the last built-in timing having the same resolution as the scaled resolutions base. This is why 3840x2160 30Hz is chosen for the timing.
macOS 10.14.6 has a new hidden preference to enable multiple refresh rates for scaled resolutions (including HiDPI resolutions).
sudo defaults write /Library/Preferences/com.apple.CoreDisplay multiRefreshRateScaledModes -bool true
Each scaled resolution (and its corresponding HiDPI resolution) will then have all the timings that the scaled resolutions base has. https://www.tonymacx86.com/threads/adding-using-hidpi-custom-resolutions.133254/post-1999528
For older macOS versions, I guess you'll need code to create scaled resolutions with specific timings, and patches to CoreDisplay to allow them. Code for some (but not all) versions of macOS that might do that is in IOGraphicsLib.c at opensource.apple.com