If the goal is to get a FAANG-level internship, then there's 2 parts.

1. Get the Interview
2. Pass the Interview

My opinion is getting the interview takes ~10% of the time and passing the interview is ~90% of the work. With this in mind, I'll

Passing the Interview.

To make life easier, you should use Python for coding interviews. It's a high-level programming language, meaning that the code looks more like English that others like C/Java. When you start Leetcoding, focus on doing the problems in Python.

For most FAANG internship interviews, you'll be asked Leetcode-style quesitons. This means to prepare for the interview you should spend most of your time solving problems on Leetcode and then once you've completed ~150 medium level problems (https://neetcode.io/ is a good place to start) then you should try and find ways to do mock interview. You can DM me when you get that point if you need help setting up mocks.

Before diving into LC, I would recommend studying the equivalent of a data structures / algorithms course. If you've already taken one, then I recommend reviewing all the concepts before diving into Leetcode.

When doing Leetcode, make sure to really understand each problem before moving onto the next one. It's ok to look at solutiosn or hints the first 1-2 times you solve a problem, but you should really digest what the key ideas are so you can solve a new problem that uses the same technique/

Getting The Interview.

If you've done any programming projects for your university coursework or on your own, make sure they are advertised on your GitHub and link them in your resume. Either way put them as "Open Source Programming" on your resume and list as many bullets and keywords as possible (e.g. Python, Machine Learning, AWS, GitHub, Testing, etc...). You might think it's cringe to add all the keywords, but recruiters scan resumes like a computer, looking for keywords. University internship recruiters will think this is really good, even though they don't know what you're doing. Put the same projects as experience on your LinkedIn as Open Source.

Once these are ready, directly reach out to 25 university recruiters at the companies you're looking to work at every day. Ask them to set up a phone call for you to learn about open role. Once you get on the phone learn about the company and ask how you can get started with the process. Even if only 1% respond, that means you'll get a phone call every 4 days. Keep doing this over 1 month and you'll get several interviews.

Answering your Questions

what should I focus on?
Personal projects on my resume? Open source personal projects on my Github? You should take any projects you've already done for school or personally and put them on GitHub. Make it look professional with README and everything, but then focus on Leetcoding.
Contributions to big and established OSS projects? This is nice but not needed.
If so, should I dive deeply into a single project, or would smaller contributions to a few projects be more advantageous? Are there any specific projects / subject areas that I should focus on? What about commercial work experience (or the lack thereof)? It's not needed for FAANG internship interviews. How does all that compare to actual leetcode knowledge / algorithmic problem-solving skills? You just need to know Leetcode. Start by reviewing DS/A and then Leetcode until you've done 150 mediums.
Any great resources for acquiring those? Leetcode.com, Neetcode.io, https://ocw.mit.edu/courses/6-006-introduction-to-algorithms..., https://coachable.dev are all great places to start :)