This is a lot of text I got a little carried away, but, detail doesn’t always hurt I guess so I didn’t try to shorten it 
It doesn’t really make a meaningful difference in most cases to use a Part or a MeshPart tbf, it’s just that if you have a lot of meshes with 500 triangles it’s going to be a lot slower than if those same meshes instead had 10 triangles, logically. A regular block Part has 6 triangles. That’s why there’s stuff like LoD (level of detail) which is entirely meant to just reduce triangle counts automatically, for example, when stuff gets far away, you can reduce the triangles in that stuff since its less obvious or visible. But, LoD also isn’t gonna make your game speed up if the problem isn’t too many triangles in the first place.
Whether you use a regular Part, or you use a MeshPart with the same mesh as a regular Part, you’re not going to be able to see a big performance difference, if there is any, except in really extreme cases, and, that performance difference will change over time when Roblox makes changes to those things too.
There’s just not really any specific thing you can just kind of do to reduce lag, in other words, there’s no way that doesn’t involve a little bit of strategy (doesn’t mean it’s hard though). The best way that you’re going to be able to reduce lag in an already laggy game is gonna be by finding out what’s causing the most lag, and then deciding how to target that thing.
For example, if its triangle count, maybe you have a specific mesh in particular that’s used a lot with a lot of triangles and just didn’t realize, so maybe that mesh adds up to a lot of triangles overall. But, if that mesh only takes up a small portion of all the triangles, than, of course, reducing the triangle count for that particular mesh isn’t going to add up to a big amount, so, it’s not really going to be worth the effort to reduce.
And, when it comes to new games, the way you reduce lag ahead of time is mostly just going to be planning ahead, e.g. while you’re building or scripting, obviously you’re not going to want to have 300 block parts stacked on top of eachother if you could make it 20 block parts. There’s also not really a huge difference between, for example, 20 block parts and 1 union part. The union may technically reduce the overall triangle count, but, in specific cases it might also not help lag, because it creates a new unique mesh, and, naturally, that means that Roblox can’t batch the Union with other block Parts when it renders them.
Roblox has something which will render identical meshes (e.g. block Parts) in batches (resizing, recoloring, changing materials, etc doesn’t change the batch at all, a green part and a red part can be batched together). This is because, in a really heavily simplified way that is definitely not the most accurate, telling the GPU to “Do [thing]” 1000 individual times (imagine counting 1000 messages that all said “Do [thing]”) is going to naturally be a lot slower than telling the GPU to “Do [thing] 1000 times.” It’s a whole lot more complicated than that ofc, but, that sort of gives the right intuition behind why part batching would be faster than individually rendering all those parts separately.
I think, that, if you have to compromise your build/script, or it takes a huge amount of effort compared to what you’ll get out, it’s probably not an ideal way to try and reduce lag, you don’t want to spend a lot of time on things that might not actually end up being impactful.
That applies in scripting and building, and basically anywhere else, e.g. in scripting, removing one if statement isn’t going to make any difference in lag unless that if statement is running (literally) billions of times per frame, because the time it takes for that if statement to happen only adds up to something big when its running that many times.
I think that a good bridge between the scripting and building parts there is that triangles are sort of like the if statement in that example above. There are a lot of triangles in games, and, the time only adds up to something big when you have so many, which could mean millions. A difference of 10 triangles isn’t going to help you if you have millions visible at once in your game unless, for example, you have a mesh that you use thousands of times, and can reduce the triangle count in that mesh by 10. Then you haven’t just reduced 10 triangles, you’ve reduced by 10 triangles many many times, so you’ve really reduced by 10,000 or more triangles.