I have a similar requirement.
If folder1 and folder2 have different project root marker, it's possible to start multiple language servers via project-vc-extra-root-markers
.
But the tricky part is when it's started from folder2, it needs to cd to folder1 before executing the language server.
I achieve this by creating a wrapper script for language server and create a function that sets an environment variable before executing the script and does do complex things in the script.
It'd be nice if there was a better solution without depending on .dir-locals.el and etc, like passing a function for the server program so that I don't have to use a script + environment variable.