Might not be the best option but because of limited information given by you I would suggest
You can create a custom Item level permission, and add that user to that particular group, but for this you will have to break inheritance. You can do this if Items are already there and list wont gonna get updated but if list will be updated frequently then you can have a feature receiver for adding Item, so that when a Item is added you can set its permission levels.
In both case you will have to break List Inheritance.
check this link out, might help :)
Item Level Permissions on a Custom List
Develop a Feature that will Break List Inheritance on activation, and then create a hidden bool column for your list as when "Maintenance Guy" will add a Item he will check box if item is related to chemistry, he will check box otherwise he will leave it blank.
Now make 2 permission levels one for chemistry students and one for biology, you can give permissions e.g. read list item or edit it, that's up 2 you.
Now develop a Item added Event Receiver that will check value of hidden column, if its true (then its related to chemistry students otherwise biology) then set that Item's permission as chemistry permission level if its not true then let that user have biology permission level you created earlier.
thats how I did it once, but if someone knows any better way they already tried then please share :)