Unfortunately no, not easily. Cloud SQL is a service deployed from Private Services (a Google-managed VPC) and when you instantiate an instance of it, that Cloud SQL is peered to your project's VPC where you deploy it. That means there's already one degree of VPC peering happening. VPC peering is not transitive sadly. So e.g. you have VPC A peered to VPC B, and VPC B is peered to VPC C. VPCs A and C cannot see each other.
Ways around this are to use VPC Sharing instead of peering, and use hosted projects to house your data (shared VPCs can see each other okay), or use Public IP on your Cloud SQL instance (but don't use authorized networks which becomes more of a security issue) and use the SQL Proxy like you are. You can also set up a bastion instance in the VPC with Cloud SQL. Use a VM with a public IP that you lock down to only be able to communicate with the application VPC, and use something like a Socks5 proxy on the bastion instance.