The typical combination is to have angular call a PHP REST backend.
Typical, yes. But not absolutely necessary. Your webservice can be structured the way you want.
However I would rather keep all the deep business logic in the back end (not just CRUD actions) but have the PHP send back to my angular the data to be displayed.
I might be misinterpreting you but, keeping your business logic in the backend is how it is supposed to be. Rest is not CRUD.
the index.php then determines which page or sub-page to load, performs whatever controller logic and then assembles the display info, loads smarty vars and then displays
The problem here is the "controller logic". From what I can gather you're trying to replace a server-side template engine with a client side template engine. That's fine. But AngularJS is not a template engine and there are some key points that might make it a bad choice in your case:
Angular is meant to work as a single page website/app. This means it expects pageflow and view logic, for instance, to be controlled by the client side. By keeping the "controller" logic in the backend, you turn Angular into an extremely inefficient and heavy template engine.
It expects the backend to serve (structured) data, not a "full" view. Sure, nothing stops you from requesting a PHP document. But it kind of defeats the purpose of using angular.
-
It plays nicely with REST because of its stateless nature. This
can be a bit of a challenge since it deviates from the usual PHP setup. The biggest example are logins and PHP sessions.
Usually, in most PHP setups, a user authenticates through a login form and then the server responds with a cookie, usually containing a PHPSESSID. While the cookie gets passed around, the user stays logged in and the appropriate UI/view/data is displayed. To adapt this logic to AngularJS single page app requires a bit of work. This article might help you
I'm pretty new to Angular: is there anything that makes this technically impossible or suboptimal?
In short... impossible no, far from it. suboptimal maybe...