This sounds like a Scrum-but
As stated in the comments, you do not have a Scrum team if it is not cross functional.
Scrum Teams are self-organizing and cross-functional
Mixing front- and back-end developers does actually make the team cross-functional. Developers arent robots; no team is composed of entirely identically skilled members. It seems like the problem you're highlighting is that you can see that you won't have perfect utilisation through this sprint.
Velocity is not a perfect predictor of work, just a tool. If occasionally you don't get full utilisation then this will impact your velocity. If the team don't feel that they can achieve this 9 point story in the sprint then they should break it down into an achievable story and bring in something else so that they can remain productive.
Maybe the team has self-organised into a back and front-end divide because that solves the problem for most sprints. It's an obvious compromise because of scenarios like you describe, but despite that, it could still be the most efficient way to organise.
In terms of becoming more cross-functional, your team should look to do skills sharing. Techniques like pair-programming are often recommended for this. As you've already got two pairs it sounds ideal to pair a back-end and front-end developer together.
Any team member should be able to do any task. You don't have to be an expert to contribute. Look at open source as an example of changes being treated by their merits. Perhaps code reviews can be used to ensure the quality remains high throughout the entire codebase.
I have been in many different types of teams and consider myself a generalizing specialist.
Scrum Teams are self-organizing and cross-functional.Principles of Scrum are based on following the other principles, so you won't find any guidance in the Scrum framework for this.