Ummm...why would you store XML data in a DB field in the first place?
But ignoring that...
Yes, it is generally poor DB design to have any kind of delimited list in a single field.
And yes, it leads you to doing things such as using XPath that you should never do.
Isn't there any way you can fix this DB design? Surely it wouldn't be that hard to run a one-time process that would go through an normalize the database and create a many-to-many table of BookAuthors. You would do that one time and then you'd have the performance--and query capabilities--that you are looking for.
Code:
CREATE TABLE BookAuthors (
bookid INT REFERENCES books(bookid),
authorid INT REFERENCES authors(authorid),
PRIMARY KEY (bookid, authorid)
);
***********
Having said all the above, you *COULD* do this with a really ugly query.
Code:
SELECT b.bookname, a.authorname
FROM books AS b, authors AS a
WHERE b.Authors LIKE CONCAT( '%>', a.authorid, '<%' )
Using LIKE will give you pretty ugly performance, so I sure hope your database is relatively tiny.